RestController 개념

oyeon·2021년 1월 27일
0

@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

profile
Enjoy to study

0개의 댓글