与 Jackson 2.9.2 兼容的 Jersey 版本都有哪些

Posted

技术标签:

【中文标题】与 Jackson 2.9.2 兼容的 Jersey 版本都有哪些【英文标题】:What are the Jersey versions compatible with Jackson 2.9.2与 Jackson 2.9.2 兼容的 Jersey 版本有哪些 【发布时间】:2018-04-25 12:15:33 【问题描述】:

您能帮我解决这两个疑问/问题吗:

任何曾经在 Jackson 2.9.2 上工作过的人都可以告诉我 Jackson 2.9.2 的兼容 Jersey 版本是什么。我目前正在使用 Jersey 2.23.2,但它不适用于 Jackson 2.9.2。我明白了以下错误:

[ERROR   ] SRVE0777E: Exception thrown by application class 'org.glassfish.jersey.servlet.WebComponent.serviceImpl:489'
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.util.BeanUtil.okNameForSetter(Lcom/fasterxml/jackson/databind/introspect/AnnotatedMethod;)Ljava/lang/String;
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1290)

2)一般来说,有没有办法找到罐子的组合。我之前也遇到过这个问题,同时找到了泽西罐和弹簧罐的正确组合。如果有人的话,它将为我和其他人面临同样的问题节省很多时间可以指导一下。

谢谢。

【问题讨论】:

【参考方案1】:

截至 2017 年 11 月中旬,Jersey 的最新版本是 2.26。

Jersey 通过jersey-media-json-jackson 扩展模块支持Jackson,该扩展模块与Jersey 核心模块的版本号相同。此扩展模块包含可自动发现的 JacksonFeature,它注册了 JacksonJsonProvider 类以将 JSON 绑定到 Java 对象。

在 2.26 版本中,此扩展依赖于 Jackson 2.8.4。在 2.23.2 版本中,它依赖于 Jackson 2.5.4。

BeanUtil.okNameForSetter(Annotated Method) 方法在 Jackson 2.5 中已弃用,并已在 Jackson 2.9 中删除。


要支持最新版本的 Jackson,您可以去掉 jersey-media-json-jackson 扩展模块。

然后将jackson-jaxrs-json-provider 模块添加到您的项目中,并直接在您的ResourceConfigApplication 实现中注册JacksonJsonProvider

【讨论】:

【参考方案2】:

我收到与以下相同的错误:

[ERROR   ] SRVE0777E: Exception thrown by application class 'org.glassfish.jersey.servlet.WebComponent.serviceImpl:489'
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: 
java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.util.BeanUtil.okNameForSetter(Lcom/fasterxml/jackson/databind/introspect/AnnotatedMethod;)Ljava/lang/String;

我能够用

解决上述问题
Jersey2 version: 2.23.2
Jackson version: 2.7.4

【讨论】:

以上是关于与 Jackson 2.9.2 兼容的 Jersey 版本都有哪些的主要内容,如果未能解决你的问题,请参考以下文章

杰克逊 2.0 和 Spring 3.1

RestEasy + Jackson 和 JBoss EAP 6.4

Spring Boot 2.0.3RELEASE+Swagger2 2.9.2+Swagger ui 2.9.2 + easypoi 3.2.0版本不兼容

杰克逊 2.0 和 Spring 3.1

@JsonIgnore无法正常工作

如何确保 Spring Boot 额外的 Jackson 模块具有相同的版本?