@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
'Hot Tech Reference > Spring Framework' 카테고리의 다른 글
[스크랩][Spring3 MVC] 국제화(Internationalization) & 현지화(Localization) 예제로 알아보기 (0) | 2014.07.03 |
---|---|
spring 메시지 컨버터 (0) | 2014.01.27 |
spring mailSender를 이용한 메일보내기 (0) | 2012.10.11 |
[validation] Spring 3.x에 validation추가하기 (2) | 2012.06.19 |
[log4j] spring 3.x에서 log4j 사용하기 (0) | 2012.06.19 |