我目前正在使用Spring - 并且正在使用Jersey的旧技术进行编组和解组 - 我需要将编组库升级到最新版本才能使用Jackson。
我通常会有一些代码可以显示,但显然在这种情况下 - 我甚至不知道从哪里开始,所以如果有人能帮忙,那就太酷了。
泽西的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 :(得分: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软件包添加到要扫描的软件包列表中。
<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>
请注意,如果您使用的是Jackson版本较新而不是2.7.0,则上述软件包将不会包含Jackson ExceptionMapper
。根据{{3}},它们现在似乎已被移除,并且@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>
我应该提一下,我们真的建议你自己编写映射器。这些映射器吐出的响应是异常消息,并不是您想要的错误响应。
答案 1 :(得分:0)
您需要更新POM以在https://mvnrepository.com/artifact/com.fasterxml.jackson.core中包含jackson jars(核心,数据绑定,注释)。您还需要执行以下操作将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中以“keys”命名的变量的类。将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()将给出与该键对应的值。