4

我将 Jackson 2 与 Payara 4 一起使用,我想在 Payara 5 中使用 Jackson 2

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

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

注意: Yasson 非常有趣,但处理抽象类或接口序列化/反序列化比放置 Jackson 注释要复杂一些。我目前的理解是它需要实现一个 JsonbSerializer/Deserializer 但实际上序列化器/反序列化器仅在字段/方法上可用(为类打开了一个问题,这将非常有帮助)。无论如何,迁移到 Yasson 将意味着根据需要实现许多序列化器/反序列化器(对于实体,当然还有集合),但我想这是一件很难的事情。

4

2 回答 2

6

您需要将该属性设置jersey.config.jsonFeatureJacksonFeature不注册默认的 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。

于 2018-05-03T16:48:43.843 回答
0

如果您的 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>
于 2020-01-22T13:11:52.447 回答