@Controller
@RequestMapping("/quizzes")
public class QuizController {
@GetMapping("/new")
public String createForm(
@RequestParam("name") String name
Model model){
model.addAttribute("quizForm", new QuizForm());
return "quizzes/createQuizForm";
}
@Controller
스프링이 자동으로 스프링 빈으로 등록한다(내부에 @Component 있음)
스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다.
@RequestMapping
요청 정보를 매핑한다. 해당 URL이 호출되면 이 메서드가 호출된다. 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지을 수 있다.변수들
value: 경로
consumes: Content-Type 헤더를 기반으로 미디어 타입으로 매핑
produces: Accept 헤더를 기반으로 미디어 타입으로 매핑
@GetMapping
@RequestMapping과 GET 메서드가 합쳐진 애노테이션이다.
POST 메서드인 PostMapping도 가능하다.(이외도 가능함)
클래스 단위로 @RequestMapping을 해주면 전체 URL을 통일해줄 수 있다.
@RequestMapping("/members") public class Controller { @RequestMapping("/new") public String createMember(){ ... } }
createMember 함수와 매핑되는 URL은
"/members" + "/new" = "/members/new"가 된다.
@RequestParam
HTTP 요청 파라미터를 위 애노테이션으로 받을 수 있다.
Model
뷰에 데이터를 전달해주는 모델을 의미한다.
model.addAttribute를 통해 모델에 데이터를 실을 수 있다.
return "quizzes/..."
뷰의 논리 이름을 반환한다.
반환한 스트링을 뷰리졸버를 통해 URL과 매핑?한다.
@Responsebody
View 조회를 무시하고, HTTP message body에 직접 해당 내용 입력
@RestController
@Responsebody와 @Controller를 합친 애노테이션
컨트롤러 함수의 변수 애노테이션:
@PathVariable
템플릿화된 URL 경로에서 매칭 되는 부분을 편리하게 조회 가능
URL 이름이 파라미터 이름과 같으면 생략가능@RequestHeader: 특정 HTTP 헤더를 조회한다.
(MultiValueMap 형식으로 모든 헤더 조회 가능)@CookieValue: 특정 쿠키 조회
@RequestParam("username") String name
-> request.getParameter("username")@RequestParam String name
-> request.getParameter("name")String name (String, int 단순 타입은 애노테이션 생략 가능)
-> request.getParameter("name")애노테이션의 변수들
@RequestParam.required - 파라미터 필수 여부(default = true)
@RequestParam.defaultValue - 디폴트 값(빈문자도 가능)@RequestParam의 파라미터들을 Map, MultiValueMap으로 조회 가능
요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다.
이 과정을 @ModelAttribute가 자동으로 수행해준다.
@ModelAttribute도 @RequestParam처럼 생략가능하다
하지만 어떤 애노테이션인지 헷갈리기 때문에 설정된 규칙이 있다.
String, int, Integer 같은 단순 타입 = @RequestParam
나머지 = @ModelAttribute
@RequestParam과 @ModelAttribute는 요청 파라미터를 통해 전달했을때 받을수 있는 경우였다.
메시지 바디를 통해서 파라미터를 전달할때는, @RequestBody를 써야한다.
@RequestBody는 생략불가능하다.