Resteasy with wildfly14:并非所有字段都被返回
Resteasy with wildfly14: not all fields are returned
我正在将我的应用程序从 wildfly 10 迁移到 wildfly 14,并且我正在使用带有 jackson2 的 resteasy 3.1.4。
我对一些休息服务的响应有一个奇怪的行为:并非所有字段都被返回(而且我确定它们是从 mongodb 中提取的)。我在部署应用程序时看到的唯一警告是:
WFLYRS0018:在 JAX-RS 部署中显式使用 Jackson 注释;系统将禁用当前部署的 JSON-B 处理。考虑将 'resteasy.preferJacksonOverJsonB' 属性 设置为 'false' 以恢复 JSON-B。
在响应中我有两个 class:
public class 字段实现 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
}
非常感谢任何帮助或建议或想法
谢谢
问这个问题已经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 规范,例如public 您模型中的私有字段,或向您的字段添加合适的 @Jsonb 注释,...就像这里,https://www.baeldung.com/java-json-binding-api。
我在 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"
根据 Soner 的回答,这在添加到 web.xml
时帮助了我:
<context-param>
<param-name>resteasy.preferJacksonOverJsonB</param-name>
<param-value>true</param-value>
</context-param>
我更喜欢这个解决方案,以便将配置保留在应用程序代码中。
我正在将我的应用程序从 wildfly 10 迁移到 wildfly 14,并且我正在使用带有 jackson2 的 resteasy 3.1.4。 我对一些休息服务的响应有一个奇怪的行为:并非所有字段都被返回(而且我确定它们是从 mongodb 中提取的)。我在部署应用程序时看到的唯一警告是: WFLYRS0018:在 JAX-RS 部署中显式使用 Jackson 注释;系统将禁用当前部署的 JSON-B 处理。考虑将 'resteasy.preferJacksonOverJsonB' 属性 设置为 'false' 以恢复 JSON-B。
在响应中我有两个 class: public class 字段实现 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
}
非常感谢任何帮助或建议或想法
谢谢
问这个问题已经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 规范,例如public 您模型中的私有字段,或向您的字段添加合适的 @Jsonb 注释,...就像这里,https://www.baeldung.com/java-json-binding-api。
我在 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"
根据 Soner 的回答,这在添加到 web.xml
时帮助了我:
<context-param>
<param-name>resteasy.preferJacksonOverJsonB</param-name>
<param-value>true</param-value>
</context-param>
我更喜欢这个解决方案,以便将配置保留在应用程序代码中。