ajax를 호출하여 @ResponseBody로 data를 view에 전달하려 하였는데
계속 406 Error가 나서 찾아보니 , ,,,,,,,,,, Spring 설정에 따라 jackson lib를 추가하라고 하더라.
관련된 좋은 글이 있길래 가져왔다. 참고하자!
출처 : http://seongilman.tistory.com/117
@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 설정을 하게 되면 디폴트 전략을 사용할 수 없다고
토비의 스프링에 나와있는 걸 보면 스프링 기본 전략을 사용하느냐, 내가 직접 전략을 짜느냐(?)의 차이인 것 같다.
'Framework > Spring' 카테고리의 다른 글
[Spring] 스프링 파일 사이즈 에러 / 업로드 파일크기 / MaxUploadSizeExceededException (0) | 2016.08.09 |
---|---|
[Spring] ajax 404 해결방법 / @ResponseBody (0) | 2016.08.05 |
[Spring] ModelMap 사용법 (0) | 2016.07.07 |
[Spring] @ResponseBody 한글깨짐 해결방법 / Spring 한글깨짐 (0) | 2016.07.01 |
[Spring] InternalResourceViewResolver 역할 / prefix suffix (0) | 2016.06.28 |