我使用Jackson 2和Payara 4,我想在Payara 5中使用 Jackson 2 。
使用JAX-RS,我也想避免更改注释等等......
在Payara 5中,默认的Jsonb提供者是Yasson。 任何禁用它并使用杰克逊的想法?欢迎所有意见/想法: - )
NB: Yasson非常有趣,但处理抽象类或接口序列化/反序列化比放置Jackson注释要复杂一些。 我目前的理解是它需要实现一个JsonbSerializer / Deserializer,但实际上序列化器/反序列化器只能在字段/方法上使用(为类打开一个问题,这将非常有用)。 无论如何,迁移到Yasson将意味着根据需要实现许多序列化器/反序列化器(对于实体和当然集合),但我想这很难。
答案 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>