maven - 在 Jersey 从 1.9 升级到 Jackson 2.0 不起作用

标签 maven jersey jackson upgrade

我正在使用 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/

相关文章:

maven - 未找到 Base64.encodeBase64String

java - Jersey Restful : Spring bean creation management

java - 处理与 Jackson `JsonIgnoreProperties` 的 JPA/Hibernate 实体双向关系的循环引用/依赖关系时出错

Java Jersey 链接头解析错误

java - 无法上传带有 Jersey 的文件

java - Jersey 在序列化期间省略 XmlTransient 注释

java - Jersey & Jackson - 修改 Jackson 输出的资源

file - 如何在命令行中为 maven 发布插件设置排除列表?

eclipse - m2e 不支持 maven-dependency-plugin (目标 "copy-dependencies"、 "unpack")

java - 如何告诉 eclipse 在不更改 pom.xml 的情况下不要验证 pom.xml?