-
@Controller, @RestController, @RequestMapping, @ResponseBody개발/Spring 2021. 1. 11. 16:52
@Controller, @RestController
Spring MVC는 request mapping, request input, exception handling등에 사용되는
@Controller
와@RestController
를 제공한다.@Controller
는 @component 를 구체화(specialization) 한 것인데, @coponent는 구현 클래스들을 classpath scanning 을 통해 자동으로 탐지되게 해주고, bean 에 자동으로 등록시킨다.@RestController
는 @Controller와 @ResponseBody로 구성된 Coposed Annotation 이다. 즉 바로 Response body를 작성하고 HTML로 렌더링한다.@Controller와 @ResponseBody처럼 다른 어노테이션에 적용될 수 있는 것들을 메타 어노테이션(meta-annotation) 이라고 한다.
일반적으로
@RequestMapping
기반 어노테이션이 붙은 핸들링 메소드와 사용된다.@RequestMapping
요청을 어떤 메소드가 처리할지 매핑해준다.
위에서 언급한 @RequestMapping 기반 어노테이션은 다음과 같다.
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @PatchMapping
스프링 4.3 버전 이하에서는
@GetMapping("/welcome")
을@RequestMapping("/welcome", method=@RequestMethod.GET)]
처럼 옵션으로 method를 주어야 한다고 한다.@RequestMapping 핸들러 메소드는 메소드 시그니쳐를 유연하게 가질 수 있고 (=제한되지 않는다는 의미인 것 같다), 다양한 리턴값과 메소드 인자를 제공한다.
@RequestMapping 핸들러 메소드 : @RequestMapping 기반 어노테이션이 적용된 메소드들
@PathVariable
: URI 템플릿 변수에 접근한다. path pattern(path pattern-
정규표현식을 사용한 것과 비슷한데, URI에서 path pattern에 매칭되는 문자를 찾고 변수로 만들어준다.
@GetMapping("/{matchedString}") public class String pvExample(@PathVariable String matchedString) { return ... }
@RequestBody
: request의 body를 캐치해서 (Object 타입에서 ->) 명시한 타입의 변수로 만든다.- HttpMessageConverter 를 사용한다고 한다.
@GetMapping("/") public class String rbExample(@RequestBody User user) { return ... }
@RequestParam
: multipart 파일을 포함한 servletrequest parameter
에 접근한다.- 즉 form에 담겨오는 데이터를 변수로 만들어준다.
@ResponseBody
@ResponseBody
어노테이션이 붙은 메소드의 리턴 값을 response body에 포함시킨다.@Controller public class WelcomeController { @GetMapping("/welcome") @ResponseBody public String welcome() { return "welcome"; } }
참고
docs.spring.io/spring-framework/docs/current/reference/html/web.html#webmvc-fn