当前位置: 首页 > 知识库问答 >
问题:

如何在JAX遥感应用程序中更改杰克逊版本

封德华
2023-03-14

我正在将JAX-RS应用程序从WebSphere 8.0迁移到WebSphere Liberty 8.5.5。

在WebSphere 8.0中,Jackson是由WebSphere提供的。我可以在AppServer\plugins\目录中找到jackson-core-asl-1.9.12.jarjackson-jaxrs-1.9.12.jarjackson-mapper-asl-1.9.12.jarjackson-xc-1.9.12.jar文件。

在新的应用服务器(WebSphere Liberty)中,我得到以下异常:< code > org . code Haus . Jackson . map . exc . unrecognizedpropertyexception:无法识别的字段“my property name”。我认为发生这个异常是因为序列化类上的注释< code > @ JsonIgnoreProperties(ignoreUnknown = true)不起作用。我猜这是因为WebSphere Liberty 8.5.5提供了一个旧版本的Jackson。

我尝试部署我的应用程序所需的Jackson版本,但没有帮助(我仍然有例外)。如何让WebSphere Liberty使用我需要的Jackson版本?

共有3个答案

皇甫乐
2023-03-14

阿列克谢,你有没有试过对自由部署的应用程序使用父级加载器方法,这样应用程序类就可以优先使用。你可以参考这个问题来获得更多见解。这里也有IBM的留档。

姜卜霸
2023-03-14

是的,WebSphere Liberty使用的是比传统WAS更旧的Jackson版本。我们需要把它修好!

同时,另一种可能性是使用 jaxrs-2.0 功能,然后将较新版本的 Jackson 包含在您的应用程序或共享库中。

Liberty的jaxrs-1.1和jaxrs-2.0特性之间的区别之一是jaxrs-2.0不公开Jackson API包。因此,应用程序的类加载器将无法加载Liberty随附的Jackson类。这意味着它将从您的应用程序中加载类,而无需执行父级委托或其他类加载器技巧。

希望这有帮助,安迪

艾嘉石
2023-03-14

WebSphere Liberty将使用您在JAX-RS 2.0中指定的Jackson版本,但有一些警告(我们正在追求)。

a)您仍然必须显式指定JSON提供者。

B) 您可能会看到一个 NPE 的 16.0.0.2,如下所述:Websphere liberty profile 中的 Regiser JacksonJsonProvider。我们已经按照所述解决了这个问题。最新的测试版不会表现出此行为,这表明下一次运行时更新也不会。

示例:https://github.com/gameontext/gameon-mediator/blob/6b469d18965673af35129abf3ff987b61af54c88/mediator-app/src/main/java/org/gameontext/mediator/JaxbJsonProvider.java

https://github . com/gameontext/gameon-mediator/blob/6b 469d 18965673 af 35129 ab F3 ff 987 b 61 af 54 c 88/mediator-app/src/main/Java/org/gameontext/mediator/JSON provider . Java

我们的 gradle 构建引入了杰克逊依赖项:https://github.com/gameontext/gameon-mediator/blob/6b469d18965673af35129abf3ff987b61af54c88/mediator-app/build.gradle

我们的server.xml使用jaxrs-2.0,但不使用任何类加载器魔法:https://github.com/gameontext/gameon-mediator/blob/6b469d18965673af35129abf3ff987b61af54c88/mediator-wlpcfg/servers/gameon-mediator/server.xml

呵呵

 类似资料:
  • 我在Java创建了一个REST网络服务。我使用Joda-time作为日期,使用Jackson作为JSON格式。所有内容都上传到Glassfish 4.1服务器上。 avax.ws.rs-api-2.0.1.jar joda-time-2.7.jar jackson-annotation-2.8.8.jar jackson-core-2.8.8.jar jackson-databind-2.8.8.

  • 我用springboot 1.5.2创建了一个简单的应用程序。我正在传递日期,并且已经提到了应用程序中的日期格式。属性文件如下:spring.jackson.joda date-time format=yyyy-MM-dd 但是,当使用POST(插入)或PUT(更新)的任何客户端调用rest-rest服务时,日期将更改为当天。示例2017-03-21将更改为2017-03-20。

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 我正在编写自定义JAX-RS 2.0应用程序(在泽西岛2.3.1下),其中包含一些数据供所有资源使用。 (我也可以使用API的< code > javax . ws . RS . core . application ,描述的结果是相同的) 然后将对象注入资源 然而,打电话的结果是 这让我使用一些丑陋的技巧,如 我对JAX-RS 2.0规范第9.2.1节的理解: 可以使用 注释将应用程序提供的 子

  • 我已经在SO和官方文档上搜索了一段时间,但我找不到直接将CDI注入JAX-RS客户端的方法。 我使用builder方法检索一个客户机,并想注册一个< code>WriterInterceptor(或任何类似过滤器的组件),它使用注入来检索另一个bean。 我想使用CDI注入,并避免向HK2注册每个bean。 和MyWriter与注入的类。 我在一个带有泽西2和焊接SE的嵌入式码头上运行。

  • 我正在尝试使用杰克逊将 JSON 对象反序列化为 Java 对象。json 是由另一位开发人员使用 jackson 库本身创建的,并提供给我。对象图有一个类型为guava的不可变映射的变量,它是一个抽象类。因此,当我尝试反序列化时,杰克逊会给我抛出以下异常。我不是 myJava 类的所有者,因此无法对其进行任何更改,例如通过编写自定义反序列化程序来更改类型或添加注释。 org.codehaus.j