@ResponseBody와 jackson을 이용하여 JSON 사용하기
@ResponseBoady란?
메서드에 @ResponseBody Annotation이 되어 있으면 return되는 값은 View를 통해서
출력되는 것이 아니라 HTTP Response Body에 직접쓰여지게 된다.
MessageConverter의 종류
- StringHttpMessageConverter
- FormHttpMessageConverter
- ByteArrayMessageConverter
- MarshallingHttpMessageConverter
- MappingJacksonHttpMessageConverter
내가 사용할건 MappingJacksonHttpMessageConverter 다. 다른건 나중에 알아봐야지..
jackson maven dependency
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
server-context.xml jackson을 위한 bean 설정
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
Controller
@RequestMapping(value = "/jsontest")
public @ResponseBody Object jsonTest(){
BoardVO vo = new BoardVO();
vo.setId("seongilman");
vo.setTitle("board title");
vo.setContent("board Content");
return vo;
}
jsp
<a href="/jsontest">click</a>
결과
{"id":"seongilman","title":"board title","content":"board Content"}
2015. 01. 26 추가
<mvc:annotation-driven/> 하위에 message-converters를 설정하지도 않고,
Jackson Bean 선언을 지웠는데도 @RequestBody와 @ResponseBody가 오류 없이 정상 작동했다.
라이브러리만 가지고 있고, 아무 설정을 하지 않았는데 어떻게 사용이 가능했다.
알아보니 스프링 3.1 부터는 AnnotationMethodHandlerAdapter 의 messageConverters 프로퍼티로 메시지 컨버터들이 등록된다고 하는데
위의 네 개의 디폴트 메시지 컨버터와 함께 Jaxb2RootElementHttpMessageConverter 와 MappingJacksonHttpMessageConverter가
추가로 등록된다고 한다. 단, 각각 JAXB2 와 Jackson 라이브러리가 클래스 패스에 존재하는 경우에만 등록된다고 한다.
<context:annotation-config/> 로도 annotation 을 읽기 위해 사용하지만 HttpMessageConverter 를 위해
<mvc:annotation-driven/> 을 사용하면 HttpMessageConverter 를 기본적으로 자동 등록한다고 한다.
결론
annotation스캔을 <mvc:annotation-driven/> 로 하고 있다면 HttpMessageConverter를 기본적으로
등록하기 때문에 별다른 설정없이 Jackson 라이브러리만 추가하면 디폴트 전략인 Jackson Json을 사용할 수 있다는 것.
<mvc:annotation-driven/> 하위에 message-converters 설정을 하게 되면 디폴트 전략을 사용할 수 없다고
토비의 스프링에 나와있는 걸 보면 스프링 기본 전략을 사용하느냐, 내가 직접 전략을 짜느냐(?)의 차이인 것 같다.
'Programming > Spring' 카테고리의 다른 글
[Spring] Spring + MyBatis(iBatis) + MySQL(Oracle) 연동 (0) | 2015.01.09 |
---|---|
[Spring] 스프링 트랜잭션 적용하기 (Spring + MyBatis + MySQL) (0) | 2014.12.09 |
[Spring] 어노테이션 Component-scan 분리하기 (0) | 2014.11.21 |
[Spring] 게시판 페이징 (0) | 2014.11.18 |
[Spring] 게시판 파일 업로드, 다운로드 (0) | 2014.11.18 |