Eya*_*yal 7 upgrade jersey jackson maven
我正在使用杰克逊(泽西岛)来序列化实体,我正在从杰克逊1.9迁移到2.0.我按照这个指南,起初似乎一切都很容易.
但仔细观察就会发现Jackson 1.9仍被用于序列化我的回答,因此忽略了我的(迁移的)Jackson 2.0注释.您可以在以下代码片段中查看我正在使用的注释:
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public abstract class IdEntity {
@Id
@JsonDeserialize(using = ObjectIdJsonDeserializer.class)
protected ObjectId id;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonSerialize(using = ObjectIdJsonSerializer.class)
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
@JsonIgnore
public String getIdAsString() {
return id == null ? "" : id.toString();
}
Run Code Online (Sandbox Code Playgroud)
我的@JsonIgnore getter被序列化,我的ObjectIdJsonSerializer没有用于ObjectId字段.
在调试中我可以看到正在使用的ObjectMapper来自1.9.
我已经删除了所有直接的maven依赖关系到Jackson 1.9,并尝试在jersey-json中添加排除项,以防止它在Jackson 1.9中提取.但我无法完全摆脱它(通过对我的依赖管理中的所有codehaus.jackson内容进行排除),因为我也使用Spring AMQP,它需要Jackson 1.9.
关于如何管理这个的任何想法?有没有人遇到/解决了类似的问题?我如何强迫泽西岛使用杰克逊2.0?
基于StaxMan和pgelinas的(有用的)答案,我正在回答我自己的问题.
我必须做两件事才能让它发挥作用.
首先要从我的web.xml中删除com.sun.jersey.api.json.POJOMappingFeature.
第二个是将我的jackson-jaxrs-json-provider(实际上是我所有的杰克逊文物)更新为2.1.
使用2.1或2.0以及POJOMappingFeature,Jackson 1.9仍然用于序列化.
使用2.0,删除了POJOMappingFeature,我得到了一个丢失的邮件正文编写器错误.
随着2.1和POJOMappingFeature被删除,一切都按预期工作.
仅仅升级Jackson核心版和映射器版本是不够的; Jersey(或任何JAX-RS实现)与Jackson之间的集成使用特定的JAX-RS提供程序.对杰克逊来说,这将是https://github.com/FasterXML/jackson-jaxrs-json-provider.
因此,您还需要添加2.x Jackson JAX-RS JSON提供程序,这将使Jersey使用Jackson 2.x进行操作.
| 归档时间: |
|
| 查看次数: |
6173 次 |
| 最近记录: |