@RequestParam은 URL의 쿼리스트링에 있는 요청 파라미터를,
@PathVariable은 URL의 경로에 있는 변수를 컨트롤러 메소드의 파라미터에 매핑하는 데 사용
@ModelAttribute: 요청 파라미터를 모델에 바인딩하거나, 모델 속성을 컨트롤러 메소드의 파라미터로 매핑할 때 사용됩니다. (스프링 4.3 버전 이전에 사용되었으나, 최신 버전에서는 명시적으로 사용하지 않아도 됨)
- @RequestParam: 요청 파라미터를 컨트롤러 메소드의 파라미터로 매핑할 때 사용됩니다.
/hello?name=John과 같은 URL 요청을 처리
@GetMapping("/hello") public String greet(@RequestParam("name") String name) { return "Hello, " + name + "!"; }
- @PathVariable: URL 경로의 일부를 컨트롤러 메소드의 파라미터로 매핑할 때 사용됩니다.
/hello/{name}과 같은 URL을 처리
URL의 경로에 포함된 값({name})을 컨트롤러 메소드의 name 파라미터에 매핑
/hello/John을 요청하면 name 파라미터에 "John"이 매핑
@GetMapping("/hello/{name}") public String greetWithPathVariable(@PathVariable("name") String name) { return "Hello, " + name + "!"; }
- @ModelAttribute: 요청 파라미터를 모델에 바인딩하거나, 모델 속성을 컨트롤러 메소드의 파라미터로 매핑할 때 사용됩니다. (스프링 4.3 버전 이전에 사용되었으나, 최신 버전에서는 명시적으로 사용하지 않아도 됨)
Spring MVC에서는 기본적으로 Jackson 라이브러리를 사용하여 JSON 데이터를 변환 처리
=> 스프링 버전에 따라 아래와 같이 produces를 사용하여 응답형식을 지정할 수 있음(생략해도 된다)
@GetMapping(value = "/getSample", produces = { MediaType.APPLICATION_JSON_UTF8_VALUE, MediaType.APPLICATION_XML_VALUE }) // 스프링 5.2 이전 APPLICATION_JSON_UTF8_VALUE // 스프링 5.2 이후 APPLICATION_JSON_VALUE
- @ModelAttribute: 요청 파라미터를 모델에 바인딩하거나, 모델 속성을 컨트롤러 메소드의 파라미터로 매핑할 때 사용됩니다. (스프링 4.3 버전 이전에 사용되었으나, 최신 버전에서는 명시적으로 사용하지 않아도 됨)
- Spring4.3 이전
이전버전의 spring에서 폼 데이터를 컨트롤러로 전송할때 model의 속성으로 취급되어 반환 할 수 있도록 강제하기 위해 어노테이션을 사용 했어야 했음. int 타입을 JSON타입인 string으로 하기위해
(@ModelAttribute("page") int page)
@GetMapping("/ex05a") public String ex05b(@ModelAttribute("page") int page) { log.info("/ex05b.........."+ page); return "/sample/ex05c"; }
Spring4.3 부터
최신버전의 spring에서는 @ModelAttribute 어노테이션이 없어도 모델의 속성으로 사용될 수 있음.
@GetMapping("/ex05a") public String ex05b(int page) { log.info("/ex05b.........." + page); return "/sample/ex05c"; }