我正在使用Jackson (在泽西岛)来序列化实体,并且我正在从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字段。
在debug中,我可以看到正在使用的ObjectMapper来自1.9。
我已经删除了Jackson 1.9的所有直接maven依赖项,并尝试在jersey-json中添加排除项,以防止它引入Jackson 1.9。但是我不能完全摆脱它(通过在我的依赖管理中排除所有codehaus.jackson的东西),因为我也在使用Spring AMQP,它需要Jackson 1.9。
关于如何管理这个问题有什么想法吗?有没有人遇到/解决过类似的问题?如何强制Jersey使用Jackson 2.0?
发布于 2013-04-11 20:15:43
基于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之后,一切都按预期进行了。
https://stackoverflow.com/questions/15865896
复制相似问题