4

简短版:

我正在使用 Jersey 1.17 和 Jackson 2.1.4,但 Jersey 忽略了我使用的每一个 Jackson-annotation。为什么!?有没有人遇到过同样的问题?

长版:

我有一个使用 Jersey 1.17 和 Jackson 1.9.2 的 RESTful Web 服务,我正在使用@JsonManagedReference@JsonBackReference注释来解决双向关系问题,一切正常。

前几天我看到了包含@JsonIdentityInfo注释的 Jackson 2.1.4 版本,这似乎是解决我的问题的好方法,所以我将 jar 文件更改为 Jackson 2.1.4。然而,有希望的@JsonIdentityInfo注释不起作用,Jersey 完全忽略了它,经过一些调试和更改代码后,我发现即使是以前的@JsonManagedReference@JsonBackReference注释也被 Jersey 忽略了。因此,Jersey 似乎完全忽略了 Jackson 2.1.4 注释。为什么!?有没有人遇到过同样的问题?

4

2 回答 2

3

http://wiki.fasterxml.com/JacksonAnnotations所述:

重要提示:Jackson 1.x 和 2.x 注释存在于不同的 Java 和 Maven 包中:请参阅 Jackson 2.0 以获得完整说明:

  • 1.x 注释在 Java 包org.codehaus.jackson.annotate中,在 Jackson 核心 jar 中
  • 2.x 注释在 Java 包com.fasterxml.jackson.annotation中,在“jackson-databind”jar 中。

所以可能是一个“进口相关”的问题。另一个原因(如@HiJon89 所述)是使用正确的 JacksonJsonProvider 版本。对于 2.x 版,它会在插入“jackson-jaxrs-json-provider”和“jersey-core”时自动注册。

我目前对 jackson 2.1.4 的工作更新(来自 1.9.2 jersey 所需的依赖项)是:

  • 移除 jersey-json 依赖
  • 添加 jersey-core 和 jackson-jaxrs-json-provider

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${jackson-jaxrs-json-provider.version}</version>
    </dependency>
    

后一个 jar 有一个文件“META-INF/services/javax.ws.rs.ext.MessageBodyWriter”,它告诉 jersey 哪个类充当提供者。

因此,除了仔细检查您的类路径中是否不再有旧的罐子外,我没有其他建议。

于 2013-04-05T15:29:34.043 回答
0

在我的情况下,由于 proguard,jackson 注释被忽略了

于 2014-10-30T08:56:59.540 回答