如何在 Payara 5 中使用 Jackson 2?

How to use Jackson 2 in Payara 5?

我在 Payara 4 中使用 Jackson 2,我想在 Payara 5 中使用 Jackson 2。

使用 JAX-RS,我也想避免更改注释等...

在 Payara 5 中,默认的 Jsonb 提供程序是 Yasson。 有什么想法可以禁用它并改用 Jackson 吗?欢迎所有 comments/ideas :-)

注意: Yasson 非常有趣,但是 handle abstract class 或 interface serialization/deserialization 比放置 Jackson 注释要复杂一点。 我目前的理解是它需要实现 JsonbSerializer/Deserializer 但实际上 serializer/deserializer 仅在 field/method 上可用(一个问题已打开 class,这将非常有帮助) . 无论如何,迁移到 Yasson 将意味着根据需要实施许多 serializer/deserializer(对于实体,当然还有集合),但我想这是一件困难的事情。

您需要将 属性 jersey.config.jsonFeature 设置为 JacksonFeature 以便不注册默认的 JsonB 功能。

您可以通过覆盖 Application.getProperties() 方法在代码中设置它,或者将 web.xml 中的 属性 设置为 context-param:

<context-param>
  <param-name>jersey.config.jsonFeature</param-name>
  <param-value>JacksonFeature</param-value>
</context-param>

如果您的 Jersey Servlet 在 web.xml 中明确声明(作为 javax.ws.rs.core.Application 或自定义子类),则在 Jersey Application servlet 声明中使用 init-param 代替:

<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <init-param>
        <param-name>jersey.config.jsonFeature</param-name>
        <param-value>JacksonFeature</param-value>
    </init-param>
    ...
</servlet>

您还需要将 Jackson 依赖项添加到您的应用程序中 - 但您可能已经这样做了,所以请忽略它。

解释:

MOXy 功能提供了 属性 jersey.config.disableMoxyJson 来禁用它。 Payara 5 中的 JsonB 功能默认不提供这样的 属性,但如果 jersey.config.jsonFeature 属性 存在且不存在 JsonBindingFeature,则不会自行注册。相同的 属性 适用于所有 Jersey 功能,因此将其设置为 JacksonFeature 将只允许注册 JacksonFeature。

如果您的 Jersey Servlet 在 web.xml 中明确声明(作为 javax.ws.rs.core.Application 或作为自定义子类),则在 Jersey Application servlet 声明中使用 init-param 代替:

<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <init-param>
        <param-name>jersey.config.jsonFeature</param-name>
        <param-value>JacksonFeature</param-value>
    </init-param>
...
</servlet>