Gidhub BE Developer

HttpMessageConverts 알아보기

2019-03-24
goodGid

HttpMessageConverts

@RestController
public class UserController {

    @ResponseBody 
    @PostMapping("/user")
    public User create(@RequestBody User user){
        return new User();
    }
  • 위 상황에서 HttpMessageConverters가 사용된다.

  • HttpMessageConverters에는 여러 종류가 있다.

  • 그 중 우리가 어떤 요청을 받았는지

    또는 어떤 응답을 보내야하는지에 따라 사용하는 HttpMessageConverters가 달라진다.

  • 예를 들어 JSON 요청이고 JSON 본문이 들어올 경우엔

    JSONMessageConverts가 사용되어 JSON 메세지를 User라는 객체로 변환시켜준다.

  • 그리고 Return 시에도

    Http는 문자로 통신을 하기 때문에

    User 객체 자체를 Response로 내보낼 순 없다.

  • 그래서 User와 같은 Composition Type을

    JSONMessageConverts를 사용하여 객체 -> 문자로 변환시켜 응답한다.

  • Composition Type 이란 그 안에 여러가지 프로퍼티를 갖을 수 있는 것을 뜻한다.


Additional Info

@RestController

  • @RestController가 붙어있으면

    @ResponseBody 어노테이션 생략이 가능하다.

@RestController
public class UserController {

    @PostMapping("/user")
    public User create(@RequestBody User user){
        return null;
    }

  • @RestController안에 이미 @ResponseBody가 존재하기 때문이다.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}

  • 그러나 @RestController가 아닌

    @Controller를 사용할 경우엔 @ResponseBody를 명시해야한다.

@Controller
public class UserController {
    @PostMapping("/user")
    public @ResponseBody User create(@RequestBody User user){
        return null;
    }
  • 그렇지 않으면 ViewNameResolver가 사용되어

    그 이름에 해당하는 View를 찾으려고 하기 때문이다.

  • 추가적으로 만약 Return Type이 String일 경우엔

    HttpMessageConverters가 아닌 StringMessageConverts가 사용된다.


Reference


Comments

Index