我正在使用 Jackson(在 Jersey )来序列化实体,并且我正在从 Jackson 1.9 迁移到 2.0。我关注了 this guide ,一开始似乎一切都很顺利。
但是仔细观察会发现 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();
}
我的 @JsonIgnore getter 正在被序列化,并且我的 ObjectIdJsonSerializer 没有用于 ObjectId 字段。
在调试中,我可以看到正在使用的 ObjectMapper 来自 1.9。
我已经删除了对 Jackson 1.9 的所有直接 maven 依赖项,并尝试向 jersey-json 添加排除项,以防止它引入 Jackson 1.9。但我无法完全摆脱它(通过在我的依赖管理中排除所有 codehaus.jackson 内容),因为我也在使用 Spring AMQP,它需要 Jackson 1.9。
关于如何管理这个的任何想法?有没有人遇到/解决过类似的问题?如何强制 Jersey 使用 Jackson 2.0?
最佳答案
我正在根据 StaxMan 和 pgelinas 的(有用的)答案回答我自己的问题。
我必须做两件事才能让它发挥作用。
第一件事是删除 com.sun.jersey.api.json.POJOMappingFeature 从我的 web.xml。
第二个是更新我的 jackson-jaxrs-json-provider (实际上,我所有的 jackson 文物)到 2.1 .
在 2.1 或 2.0 以及 POJOMappingFeature 中,Jackson 1.9 仍在用于序列化。
在 2.0 和 POJOMappingFeature 删除后,我收到了一个缺少消息正文编写器的错误。
删除 2.1 和 POJOMappingFeature 后,一切都按预期工作。
关于maven - 在 Jersey 从 1.9 升级到 Jackson 2.0 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15865896/