【问题标题】:Resteasy with wildfly14: not all fields are returnedWildfly14 的 Resteasy:并非所有字段都返回
【发布时间】:2019-03-12 21:24:05
【问题描述】:

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

在响应中,我有两个类: 公共类字段实现可序列化{

   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

}

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

谢谢

【问题讨论】:

    标签: serialization migration wildfly resteasy jackson2


    【解决方案1】:

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

        <context-param>
            <param-name>resteasy.preferJacksonOverJsonB</param-name>
            <param-value>true</param-value>
        </context-param>
    

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

    【讨论】:

      【解决方案2】:

      我在 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"
      

      【讨论】:

      • JAVA_OPTS="$JAVA_OPTS -Dresteasy.preferJacksonOverJsonB=true" 这实际上解决了我的问题。
      【解决方案3】:

      问这个问题已经 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
      • 排除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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2019-05-04
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多