ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @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 파일을 포함한 servlet request parameter에 접근한다.

    • 즉 form에 담겨오는 데이터를 변수로 만들어준다.

    그외 참고 - spring.io

    @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

    goddaehee.tistory.com/203

    댓글

Designed by Tistory.