从泽西岛的1.9升级到Jackson 2.0不起作用

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?

Eya*_*yal 8

基于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被删除,一切都按预期工作.


Sta*_*Man 5

仅仅升级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进行操作.