如何在Payara 5中使用Jackson 2?

时间:2018-04-12 09:45:22

标签: jax-rs jsonb jackson2 payara payara-micro

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

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

在Payara 5中,默认的Jsonb提供者是Yasson。 任何禁用它并使用杰克逊的想法?欢迎所有意见/想法: - )

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

2 个答案:

答案 0 :(得分:5)

您需要将属性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>

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

说明:

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

答案 1 :(得分: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>