经过漫长的一天,又一个...在阅读了许多wiki和常见问题解答之后,它终于可以工作了。
我做了什么:
- 使用杰克逊
- 强制杰克逊提供程序的使用
- 定义自定义反序列化程序
- 激活ACCEPT_SINGLE_VALUE_AS_ARRAY标志
- 修复依赖关系
故事:
我使用的是泽西岛1.13,默认情况下使用(我活着)jaxb。
我把它改成使用杰克逊
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
如以下所述:
https://stackoverflow.com/a/13895768/660990
这使我的球衣使用杰克逊,但问题仍然存在;jackson 还不能反序列化数组。
我强制使用 Jackson 提供程序:
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>
your.project.packages;
org.codehaus.jackson.jaxrs</param-value>
</init-param>
https://stackoverflow.com/a/3143214/660990
这是一个需要的步骤,但还不够。有必要激活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;
}
}
为了做到这一点:
自定义对象映射器
在完成所有这些操作后,它仍然不起作用...
经过一番搜索,我发现:
杰克逊 2.0 与泽西 1.12
这讨论了依赖性问题。
这揭示了我的问题, 泽西岛 v1.13 与杰克逊 v1.9.2 我需要杰克逊 v2.0
我删除了 jersey-json 的依赖项,因为它包含 jackson 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
注意:此更改删除了泽西岛使用 Jaxb 或抛弃的能力。
题外话,可能对某人感兴趣:
将泽西/杰克逊配置为不使用@XmlElement字段注释进行 JSON 字段命名