使用wildfly14 Resteasy:并非所有字段都返回

Gia*_*mma 4 migration serialization resteasy wildfly jackson2

我正在将我的应用程序从wildfly 10 迁移到wildfly 14,并且我正在将resteasy 3.1.4 与jackson2 一起使用。我对某些休息服务的响应有一种奇怪的行为:并非所有字段都返回(我确定它们是从 mongodb 中提取的)。我在部署应用程序时看到的唯一警告是:WFLYRS0018:在 JAX-RS 部署中显式使用 Jackson 注释;系统将禁用当前部署的 JSON-B 处理。考虑将 'resteasy.preferJacksonOverJsonB' 属性设置为 'false' 以恢复 JSON-B。

在响应中,我有两个类: public class Field implements Serializable {

   private static final long serialVersionUID = -230381150649916138L;

   private String name; // returned in response
   private FieldsTypeEnum type; // NOT returned in response
   private List<String> comboValues; // NOT returned in response
   private boolean required; // NOT returned in response

    //All getters and setters

}

public class ConfigurationField extends Field {

   private static final long serialVersionUID = -2727277793405725817L;

   private Integer row; // returned in response
   private boolean useForCalendar; // returned in response

   //All getters and setters

}
Run Code Online (Sandbox Code Playgroud)

任何帮助或建议或想法都非常感谢

谢谢

Tha*_* Ha 12

问这个问题已经6个月了。但是,几天前我在 Wildfly 16 上遇到了类似的问题。

该问题是由于 JsonBindingProvider 在处理 JSON 有效负载方面优先于其他提供程序,特别是 Jackson 的。 https://issues.jboss.org/browse/RESTEASY-1911

请在此处查看文档。 https://github.com/resteasy/Resteasy/commit/f6ddef5accb88d924e3d14ab15e081c79136fe55

它可以通过 2 种方式修复,而无需更新您的模型 (POJO) 对象:

  • 启动 Wildfly 时添加系统属性 -Dresteasy.preferJacksonOverJsonB=true
  • 排除 jsonb 模块 jboss-deployment-structure.xml
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
    <deployment>
        <exclusions>
            <module name="org.jboss.resteasy.resteasy-json-binding-provider" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

如果您不想更改 Wildfly 配置,您必须更新您的模型以符合 JsonB 规范,例如在您的模型中公开您的私有字段,或在您的字段中添加合适的 @Jsonb 注释,...就像这里,https:/ /www.baeldung.com/java-json-binding-api


Jar*_*rdo 7

根据 Soner 的回答,这在添加到时对我有帮助web.xml

    <context-param>
        <param-name>resteasy.preferJacksonOverJsonB</param-name>
        <param-value>true</param-value>
    </context-param>
Run Code Online (Sandbox Code Playgroud)

我更喜欢这个解决方案,以便将配置保留在应用程序代码中。