轻松使用wildfly14:并非所有字段都会返回

时间:2018-10-08 08:34:07

标签: serialization migration wildfly resteasy jackson2

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

在响应中,我有两个类:     公共类Field实现了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

}

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

谢谢

2 个答案:

答案 0 :(得分:1)

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

此问题是由JsonBindingProvider引起的,它比其他提供程序优先处理JSON负载,尤其是Jackson。 https://issues.jboss.org/browse/RESTEASY-1911

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

可以通过两种方式修复它,而不必更新模型(POJO)对象:

  • 启动Wildfly -Dresteasy.preferJacksonOverJsonB=true时添加系统属性
  • jboss-deployment-structure.xml中排除jsonb模块
<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>

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

答案 1 :(得分:0)

我在 Wildfly 21 中遇到了类似的问题。添加一个 jboss-deployment-structure.xml 如下:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.3">
    <deployment>
        <exclusions>
            <module name="org.jboss.resteasy.resteasy-json-binding-provider"/>
        </exclusions>
        <dependencies>
            <module name="org.jboss.resteasy.resteasy-jackson2-provider" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

没有帮助

对我来说,可行的解决方案是在 Wildfly standalone.conf 中添加以下行以更喜欢 jackson:

JAVA_OPTS="$JAVA_OPTS -Dresteasy.preferJacksonOverJsonB=true"