我将杰克逊 2 与 Payara 4 一起使用,我想在 Payara 5 中使用杰克逊 2。
使用 JAX-RS,我还想避免更改注释等...
在Payara 5中,默认的Jsonb提供程序是Yasson。有什么想法可以禁用它并使用杰克逊吗?欢迎所有评论/想法:-(
注意:Yasson非常有趣,但是处理抽象类或接口序列化/反序列化比放置Jackson注释要复杂一些。我目前的理解是它需要实现 JsonbSerializer/解串器,但实际上序列化器/反序列化器仅在字段/方法上可用(为类打开了一个问题,这将非常有帮助(。无论如何,迁移到 Yasson 将意味着根据需要实现许多序列化程序/反序列化程序(对于实体,当然还有集合(,但我想这是一件很难的事情。
需要将属性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 功能默认值不提供此类属性,但如果属性存在且未JsonBindingFeature
jersey.config.jsonFeature
则不会自行注册。同一属性适用于所有泽西岛功能,因此将其设置为 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>