我正在使用 Jackson(位于泽西岛)来序列化实体,并且我正在从 Jackson 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();
}
我的 @JsonIgnore getters 正在被序列化,并且我的 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。
第二个是更新我的杰克逊 jaxrs-json-provider(实际上,我所有的杰克逊文物)2.1.
在 2.1 或 2.0 以及 POJOMappingFeature 中,Jackson 1.9 仍然用于序列化。
使用 2.0 并删除 POJOMappingFeature 后,我收到丢失消息正文编写器错误。
删除 2.1 和 POJOMappingFeature 后,一切都按预期进行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)