본문 바로가기
Hot Tech Reference/Spring Framework

@ResponseBody 이해하기

by cusmaker 2014. 1. 27.
반응형

@ResponseBody 이해하기


메소드에 @ResponseBody 로 어노테이션이 되어 있다면 메소드에서 리턴되는 값은 View 를 통해서 

출력되지 않고 HTTP Response Body 에 직접 쓰여지게 됩니다.

이때 쓰여지기 전에 리턴되는 데이터 타입에 따라 MessageConverter 에서 변환이 이뤄진 후 쓰여지게 됩니다.


MessageConverter 의 종류

- StringHttpMessageConverter

- FormHttpMessageConverter

- ByteArrayMessageConverter

- MarshallingHttpMessageConverter

MappingJacksonHttpMessageConverter

Jackson's ObjectMappter 를 사용하여 request, response 를 JSON 으로 변환할때 사용되는 MessageConverter 이다.

applicaton/json 을 지원한다.

- SourceHttpMessageConverter

- BufferedImagedHttpMessageConverter


아래는 MessageConvert 와 View 를 같이 사용하는 예제

getByIdInJSON 메소드의 경우 @ResponseBody 어노테이션이 있는 반면에 getByidInHTML 은 어노테이션이 없다.

@ResponseBody 가 있는 getByIdInJSON 메소드는 리턴값이 UserModel 객체가 MessageConvert 로 설정된  MappingJacksonHttpMessageConverter 에서 JSON 으로 변환 작업이 이뤄지고

@ResponseBody 가 없는 getByIdInHTML 메소드는 ViewResolver 에 의해 선택된 /WEB-INF/jsp/user.jsp 에서 처리가 이뤄지게 됩니다.


자바 코드

@Controller

@RequestMapping("/user")

public class UserController {

@RequestMapping( value="/json/{id}", method = RequestMethod.GET)

@ResponseBody

public UserModel getByIdInJSON( @PathVariable String id){

UserModel user = new UserModel();

user.setId( id);

user.setName( "ellie");

return user;

}

@RequestMapping( value="/html/{id}", method = RequestMethod.GET)

public String getByIdInHTML( @PathVariable String id, ModelMap model){

UserModel user = new UserModel();

user.setId( id);

user.setName( "ellie");

model.addAttribute( "user", user);

return "user";

}

}


xxx-servler.xml 파일


<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<property name="messageConverters">

  <list>

<ref bean="jsonHttpMessageConverter"/>

  </list>

</property>

</bean>


<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/jsp/"></property>

<property name="suffix" value=".jsp" />

</bean>


출처 : http://ismydream.tistory.com/140