@RestController
- Spring 4 에서 Rest API 또는 Web API를 개발하기 위해 등장한 애너테이션이다.
- 이전 버전의 @Controller와 @ResponseBody를 포함한다.
MessageConverter
- 자바 객체와 HTTP 요청 / 응답 바디를 변환하는 역할
- @ResponseBody, @RequestBody
- @EnableWebMvc 로 인한 기본 설정
- WebMvcConfigurationSupport 를 사용하여 Spring MVC 구현
- Default MessageConvertor 를 제공
- WebMvcConfigurationSupport.java 의 addDefaultHttpMessageConverters메소드 항목 참조
MessageConverter 종류
JSON 응답하기
- Controller의 메서드에서는 JSON으로 변환될 객체를 반환한다.
- jackson 라이브러리를 추가할 경우 객체를 JSON으로 변환하는 MessageConverter가 사용되도록 @EnableWebMvc에서 기본으로 설정되어 있다.
- jackson 라이브러리를 추가하지 않으면 JSON메시지로 변환할 수 없어 500오류가 발생한다.
- 사용자가 임의의 메시지 컨버터(MessageConverter)를 사용하도록 하려면 WebMvcConfigurerAdapter의 configureMessageConverters메소드를 오버라이딩 하도록 한다.
Web API에서 JSON 메시지를 자주 사용하는 이유
- JSON은 기존 XML과 다르게 객체형태와 매우 닮아있어 가독성이 매우 뛰어나고 이로인해 당연히 작성하기도 쉽다. 특히 언어나 플랫폼에 종속되지 않기 때문에, 하나의 폼으로 백에서 프론트까지 쉽게 오갈 수 있어 개발이 용이해진다.
JSON 장점
- 대부분의 언어에서 사용이 가능하고 여러가지 타입으로 변환하여 값을 받아올 수 있다.
결론
- 일반적인 Spring MVC @Controller와 RESTful 컨트롤러인 @RestController의 차이점은 HTTP Response Body가 생성되는 방식이다.
- @Controller 는 View Page를 반환하지만, @RestController는 객체(VO,DTO)를 반환하기만 하면, 객체데이터는 application/json 형식의 HTTP ResponseBody에 직접 작성되게 된다.
원리
그래서 스프링은 어떤 원리로 JSON을 return하거나 text/plain 타입을 return 할까?
- @ResponseBody 어노테이션은 값을 리턴할 타입을 보고 알맞은 MessageConverter 인터페이스를 상속받고있다.
reference
https://wondongho.tistory.com/76