티스토리 뷰

1) RestController?

@RestController

  • Spring 4 에서 Rest API 또는 Web API를 개발하기 위해 등장한 애노테이션입니다.
  • 이전 버전(Spring3) @Controller @ResponseBody를 포함합니다.

MessageConverter

  • 자바 객체와 HTTP 요청 / 응답 바디를 변환하는 역할
  • @ResponseBody, @RequestBody
  • @EnableWebMvc 로 인한 기본 설정
  • WebMvcConfigurationSupport 를 사용하여 Spring MVC 구현
  • Default MessageConverter 를 제공
  • 링크 바로가기  addDefaultHttpMessageConverters메소드 항목 참조
  • RestController를 사용하기 위해서는 MessageConverter가 굉장히 중요합니다. 예를 들면 외부에서 전달받은 JSON 메서드를 내부에서 사용할 수 있는 객체로 변환하거나 컨트롤러를 리턴한 객체가 클라이언트에게 JSON으로 변환해서 전달할 수 있도록 하는 역할을 MessageConverter가 합니다. 이런 MessageConverter @EnableWebMvc로 사용하게 되면 기본으로 제공이 됩니다.

MessageConverter 종류

MessageConverter 종류

기능

ByteArrayHttpMessageConverter

converts byte arrays

StringHttpMessageConverter

converts Strings

ResourceHttpMessageConverter

converts org.springframework.core.io.Resource for any type of octet stream

SourceHttpMessageConverter

converts javax.xml.transform.Source

FormHttpMessageConverter

converts form data to/from a MultiValueMap<String, String>

Jaxb2RootElementHttpMessageConverter

converts Java objects to/from XML (added only if JAXB2 is present on the classpath)

MappingJackson2HttpMessageConverter

converts JSON (added only if Jackson 2 is present on the classpath)

MappingJacksonHttpMessageConverter

converts JSON (added only if Jackson is present on the classpath)

AtomFeedHttpMessageConverter

converts Atom feeds (added only if Rome is present on the classpath)

RssChannelHttpMessageConverter

converts RSS feeds (added only if Rome is present on the classpath)

JSON 응답하기

  • 컨트롤러의 메소드에서는 JSON으로 변환될 객체를 반환합니다.
  • jackson라이브러리를 추가할 경우 객체를 JSON으로 변환하는 메시지 컨버터가 사용되도록 @EnableWebMvc에서 기본으로 설정되어 있습니다.
  • jackson라이브러리를 추가하지 않으면 JSON메시지로 변환할 수 없어 500오류가 발생합니다.
  • 사용자가 임의의 메시지 컨버터(MessageConverter)를 사용하도록 하려면 WebMvcConfigurerAdapter configureMessageConverters메소드를 오버라이딩 하도록 합니다.
  • json으로 변환을 하기 위해서 기본 MessageConverter jackson 라이브러리를 사용하고 있습니다. 그래서 만약에 jackson 라이브러리가 제대로 추가되어 있지 않으면 JSON을 처리하는 Converter가 등장하지 않기 때문에 500번 오류를 발생시키게 됩니다.

생각해보기

  • Web API에서 JSON메시지를 자주 사용하는 이유는 무엇일까요?
  • JSON메시지의 장점에 대해 찾아보세요.

참고 자료

[참고링크] spring-projects/spring-framework
https://github.com/spring-projects/spring-framework/blob/master/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

[참고링크] Building a RESTful Web Service          https://spring.io/guides/gs/rest-service/

[참고링크] Building REST services with Spring           https://spring.io/guides/tutorials/bookmarks/

 

Comments