经过漫长的一天,又是…阅读了许多Wiki和常见问题解答之后,它终于可以工作了。
我做了什么:
- 使用杰克逊
- 强制Jackson提供商使用
- 定义自定义反序列化器
- 激活ACCEPT_SINGLE_VALUE_AS_ARRAY标志
- 修复依赖关系
故事:
我正在使用默认情况下使用(I belive)jaxb的Jersey 1.13。
我将其更改为 使用杰克逊
<init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value></init-param>
如以下所述:
这使我的球衣使用杰克逊,但问题仍然存在。杰克逊还不能反序列化数组。
我强迫使用 Jackson提供商 :
<init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value> your.project.packages; org.prehaus.jackson.jaxrs</param-value></init-param>
是必要的步骤,但还不够。必须激活 ACCEPT_SINGLE_VALUE_AS_ARRAY 标志。
ObjectMapper objectMapper;objectMapper = new ObjectMapper().configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
我需要定义 自定义反序列化器
public class MyResolver implements ContextResolver<ObjectMapper> {@Override public ObjectMapper getContext(final Class<?> objectType) { ... return objectMapper; }}
为了做到这一点:
定制对象映射器
完成所有这些 *** 作后,它仍然无法正常工作…
那讨论 依赖问题 ..
这反映了我的问题, Jackson v1.9.2 附带了 Jersey v1.13 , 我需要Jackson v2.0
我删除了jersey-json的依赖项,因为它包括杰克逊1.9.2:
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId></dependency>
并直接声明依赖项:
<dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId></dependency>
参考:
jackson-jaxrs-json-provider
注意: 此更改将删除Jersey的使用Jaxb或Jettison的功能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)