用于在反序列化期间忽略未知属性的 SpringMVC 全局设置

Posted

技术标签:

【中文标题】用于在反序列化期间忽略未知属性的 SpringMVC 全局设置【英文标题】:SpringMVC global setting for ignoring unknown properties during deserialization 【发布时间】:2021-11-02 02:58:27 【问题描述】:

Spring Boot 默认设置“spring.jackson.deserialization.fail-on-unknown-properties=false”。我有一个在 Spring Boot 中运行良好的库,但在现有 SpringMVC 应用程序中使用时,它会抛出“无法识别的字段,未标记为可忽略”。我可以在配置或其他方式中设置 SpringMVC 的一些可比较的全局设置吗?

编辑:spring webmvc 版本 3.2.15.RELEASE

【问题讨论】:

那是哪个 SpringMVC 版本? 春季版 3.2.15.RELEASE 【参考方案1】:

您可以按照我在this 回答中提到的两种方法。如果我没记错的话,任何一个都可以为你工作。 (但如果你的 clinet 类没有无参数默认构造函数,方法 1 将不起作用)

【讨论】:

不幸的是 Jackson2ObjectMapperBuilder 不在春季 3.2.15;直到 4.1.1 我认为。 还没有,我尝试了自定义反序列化器的好主意,但它不起作用,因为我现在坚持使用 spring 3.2.15。明天我会看看那个版本是否有类似的方法。谢谢! @bob 如果你能分享你的代码,那会很有帮助 抱歉,我没有任何代码要分享。我将一个通常在 spring boot 中运行的库添加到我已经运行的 springmvc 应用程序中,它会引发该异常。我希望有一些设置可以让它忽略未知字段。【参考方案2】:

您可以使用注释映射的类

@JsonIgnoreProperties(ignoreUnknown = true)

或者创建添加如下配置到 ObjectMapper 中:

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

【讨论】:

是的,但我无权访问源代码

以上是关于用于在反序列化期间忽略未知属性的 SpringMVC 全局设置的主要内容,如果未能解决你的问题,请参考以下文章

在 xml 序列化期间忽略属性,但在反序列化期间不忽略

在使用 Jackson 反序列化期间选择性地忽略 JSON 属性

JsonSerializer 在反序列化期间不使用内部构造函数

我可以让 XmlSerializer 在反序列化时忽略命名空间吗?

在反序列化时如何忽略JSON对象数组中的空白数组?

在反序列化期间使用 XML 装饰指定默认值