2016-09-29 15 views
0

我目前正在使用Spring--並且正在使用Jersey的舊技術來編組和解組 - 我需要將編組庫升級到最新版本才能使用Jackson 。從JSON/XML編組升級切換到使用Jackson 2

我通常會得到一些代碼來顯示,但顯然在這種情況下 - 我甚至不知道從哪裏開始,所以如果任何人都可以幫忙,那很酷。

web.xml配置澤西島:

<servlet> 
    <description>Jersey Servlet</description> 
    <servlet-name>jersey</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

POM:

<jersey.version>1.4</jersey.version> 
<dependency> 
    <groupId>com.sun.jersey.contribs</groupId> 
    <artifactId>jersey-spring</artifactId> 
    <version>${jersey.version}</version> 
    <scope>runtime</scope> 
    <!-- exclude spring dependencies so can pin to our desired versions (esp. spring-web) --> 
    <exclusions> 
    <exclusion> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>${jersey.version}</version> 
</dependency> 

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>${jersey.version}</version> 
</dependency> 
+0

看看這是否有幫助。 http://stackoverflow.com/questions/37778893/basic-full-configuration-for-jersey-on-tomcat-in-eclipse/37784074#37784074 – Veeram

+0

我可能是錯的,但是這不是更多的初始設置爲反對升級? – MickeyThreeSheds

+0

升級到傑克遜2將需要你球衣2,除非你真的需要工作球衣1與傑克遜一起工作2 – Veeram

回答

0

如果你想用傑克遜2,你首先應該擺脫jersey-json的,然後添加以下

<dependency> 
    <groupId>com.fasterxml.jackson.jaxrs</groupId> 
    <artifactId>jackson-jaxrs-json-provider</artifactId> 
    <version>${jackson2.version}</version> 
     <!-- latest right now is 2.8.3 --> 
</dependency> 

然後在您的servlet配置中,將Jackson包添加到列表中o f軟件包進行掃描。

<servlet> 
    <servlet-name>jersey</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value> 
      your.packages, 
      com.fasterxml.jackson.jaxrs.json <!-- add jackson --> 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

請注意,如果您使用的是傑克遜版本比2.7.0更新,上述包不會包括傑克遜ExceptionMapper秒。根據this issue,它似乎已被刪除,並且@Provider註釋已被刪除。所以我們不能打包掃描。

所以,如果你想要映射器,你應該按類來聲明它們。

<param-name> 
    com.sun.jersey.config.property.classnames 
</param-name> 
<param-value> 
    com.fasterxml.jackson.jaxrs.base.JsonMappingExceptionMapper, 
    com.fasterxml.jackson.jaxrs.base.JsonParseExceptionMapper 
</param-value> 

我應該提一下,它是真的建議編寫自己的映射器。這些映射器吐出的響應是異常消息,這不是你想要的錯誤響應。

0

您需要更新您的POM以包括傑克遜罐(核心,數據綁定,註釋)在https://mvnrepository.com/artifact/com.fasterxml.jackson.core。您還需要爲JSON轉換爲Java對象做以下反之亦然

<beans:bean 
     class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
     <beans:property name="messageConverters"> 
      <beans:list> 
       <beans:ref bean="jsonMessageConverter" /> 
      </beans:list> 
     </beans:property> 
    </beans:bean> 

    <!-- Configure bean to convert JSON to POJO and vice versa --> 
    <beans:bean id="jsonMessageConverter" 
     class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
    </beans:bean> 

您將需要創建與在JSON的「鑰匙」後,命名變量的類。該代碼以JSON字符串轉換的Java類的反對將是如下:

假設JSON是

{ 
'name' : 'Test', 
'userId' : 'test101' 
} 

與此對應的Java類是:

public class Test { 
    private String name; 
    private String userId; 
    // Write getter and setter methods for each variable. 
} 

守則將JSON字符串轉換爲Test類的對象應該是:

ObjectMapper mapper = new ObjectMapper(); 
String jsonInString = ""{'name' : 'Test', 'userId' : 'test101'}""; 
//JSON from String to Object 
Test obj = mapper.readValue(jsonInString, Test.class); 

obj.getName()wo而是給出對應於該密鑰的值。