servlet.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <context:component-scan base-package="com.springapp.mvc" /> <!-- JSR-303 support will be detected on classpath and enabled automatically --> <mvc:annotation-driven> <!-- 컨트롤러에서 넘어온 데이터(JSON 같은)를 messageConverter로 사용할 수 있는 방법 1 --> <!--<mvc:message-converters>--> <!--<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">--> <!--<property name="supportedMediaTypes" value="application/json" />--> <!--</bean>--> <!--</mvc:message-converters>--> </mvc:annotation-driven> <!-- 컨트롤러에서 넘어온 데이터(JSON 같은)를 messageConverter로 사용할 수 있는 방법 2 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <util:list list-class="java.util.ArrayList"> <ref bean="mappingJackson2HttpMessageConverter"/> </util:list> </property> </bean> <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean>
[Spring Framework] JsonView 설정과 Spring 4.1에서 406 Error 대처법
브라이언7 2015.03.26 13:17SpringMVC에서 Ajax와 JSON
여기가 가장 정리가 잘 되어 있었다. (감사합니다. 잘 보겠습니다.^^)
[목차]
1. response객체에 문자열 담기
2. ObjectMapper
3. @ResponseBody
4. jsonView
개인적으로는 @ResponseBody 에 담는 방법이 가장 간단하게 JsonView를 사용할 수 있는 방법이 아닐까 싶다.
Spring Framework 버전을 4.0.6.RELEASE 에서 가장 최근 버전인 4.1.6.RELEASE 으로 올렸더니,
@ResponseBody 를 이용한 JsonView의 응답이 406 Not Acceptable 에러가 난다.
406 Error - Not Acceptable
당황하며 구글링을 해 봤더니,
HTTP 406 Error Occured Upgrade to Spring MVC 4.1 Using JSON
위에 쓰인 바와 같이 pom.xml 에서
 <!-- Json View -->
 <dependency>
     <groupId>org.codehaus.jackson</groupId>
     <artifactId>jackson-mapper-asl</artifactId>
     <version>1.9.13</version>
 </dependency>
이렇게 사용하고 있었는데,
 <dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-databind</artifactId>
 <version>2.5.1</version>
 </dependency>
위와 같이 바꾸어서 해결했다.
그런데 이런 에러가 갑자기 발생한 원인과 jackson-mapper-asl 라이브러리를 jackson-databind 라이브러리로 대체해도 되는가 하는 의문이 남는다.
먼저 이런 에러가 발생한 원인은...
Migrating from earlier versions of the Spring Framework
https://github.com/spring-projects/spring-framework/wiki/Migrating-from-earlier-versions-of-the-Spring-Framework#libraries
Jackson 1.8/1.9
All Jackson v1 support is deprecated in favor of Jackson v2 and has been removed in Spring Framework 4.1:
- JacksonObjectMapperFactoryBean
- MappingJacksonHttpMessageConverter
- MappingJacksonJsonView
- MappingJacksonMessageConverterfor JMS
위에 쓰인 바와 같이 Spring 4.1 에서 Jackson 1.8/1.9의 지원을 중단해 버렸다.
이제 갑자기 JsonView로 요청 시 HTTP Status 406 Error 가 난 원인은 알았다.
그런데 아직 jackson-mapper-asl 라이브러리를 jackson-databind 라이브러리로 대체해도 되는가 하는 의문이 남았다. 
Jackson-mapper-asl 라이브러리를 mvnrepository.com 에서 찾아 보았다.
This artifact was moved to:
New Group   com.fasterxml.jackson.core
New Artifact  jackson-databind
라고 써 진 것이 눈에 띈다.
jackson-mapper-asl 라이브러리가 다른 Group의 jackson-databind 로 옮겨진 것이다.
이제 마음 놓고 pom.xml 을 수정하자.^^
jsonView Spring Framework 설정 파일 변경
Old Library
<!-- json result  -->
<bean id="jsonView" class="net.sf.json.spring.web.servlet.view.JsonView">
 <!-- <property name="contentType" value="application/json;charset=UTF-8"/> -->
 <property name="contentType" value="text/html; charset=UTF-8" />
</bean>
현재 방식
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
 <!-- <property name="contentType" value="application/json;charset=UTF-8"/> -->
 <property name="contentType" value="text/html;charset=UTF-8"/>
</bean>
출처: http://bryan7.tistory.com/458 [민서네집]
 
 
댓글 없음:
댓글 쓰기