jakarta-ee - 无法识别的字段...未标记为可忽略,EE8 / Jakarta EE
问题描述
我将 Wildfly 18 与 Resteasy 一起使用。
通过在我的 JSON API 的主体上传递一个未知属性,我得到了这个:
无法识别的字段“foo”(xxx 类),未标记为可忽略
我知道这是杰克逊提供者的问题,在过去我用这个提供者解决的项目中:
@Provider
public class JerseyObjectMapperProvider implements ContextResolver<ObjectMapper> {
private ObjectMapper defaultMapper;
public JerseyObjectMapperProvider() {
MapperConfigurator mapperConfig = new MapperConfigurator(null, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS);
mapperConfig.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
defaultMapper = mapperConfig.getDefaultMapper();
}
@Override
public ObjectMapper getContext(Class<?> type) {
return defaultMapper;
}
}
现在我已经转移到 EE8 / JakartaEE 上,其中包含框架上的 JsonB 指令,因此我正在使用JsonbConfig。这是我的提供者:
@Provider
@Priority(Priorities.ENTITY_CODER)
public class JSONBConfiguration implements ContextResolver<Jsonb> {
private Jsonb jsonb;
public JSONBConfiguration() {
JsonbConfig config = new JsonbConfig()
.withFormatting(true)
.withNullValues(true)
.withPropertyNamingStrategy(PropertyNamingStrategy.IDENTITY)
.withPropertyOrderStrategy(PropertyOrderStrategy.ANY)
.withDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ITALY);
jsonb = JsonbBuilder.create(config);
}
@Override
public Jsonb getContext(Class<?> type) {
return jsonb;
}
}
有没有办法像上面的映射器一样使用JsonbConfig设置忽略未知属性?
解决方案
您可能正在使用JSON-B 的参考实现Yasson。Yasson 有一个选项FAIL_ON_UNKNOWN_PROPERTIES。此选项是非标准的,即它不是 JSON-B 规范的一部分。默认情况下禁用此选项,因此反序列化应忽略未知属性而不是引发异常。您可以按如下方式配置此属性:
JsonbConfig config = new JsonbConfig().setProperty(org.eclipse.yasson.YassonConfig.FAIL_ON_UNKNOWN_PROPERTIES, true);
Jsonb jsonb = JsonbBuilder.create(config);
推荐阅读
- powershell - 跨域 Get-AdPrincipalGroupMembership 所需的最低权限?
- scala - Spark数据集中的groupByKey,沿着聚合执行自定义逻辑
- c++ - CLion 生成错误的 CMake 命令
- c# - 列表中的每个像素碰撞
- node.js - Socket.io、Node、Corodva,我没有在客户端接收器中收到消息
- php - 难以在端口 8080 上设置虚拟主机
- azure - 在 Azure 中检索 NIC 和关联的 VM
- php - 日期格式使用 dd/mm/yyyy 使用 HTML
- java - 如何在 Intellij IDEA 中显示带有参数自动提示信息的 Javadoc?
- javascript - Material ui DatePicker 仅启用年份