📜  Java的UnrecognizedPropertyException(1)

📅  最后修改于: 2023-12-03 15:16:37.032000             🧑  作者: Mango

Java的UnrecognizedPropertyException

当出现UnrecognizedPropertyException时,表示在反序列化对象时,在JSON中找到的属性与目标对象的属性不匹配。这通常是因为 JSON 字符串中包含了多余的属性或者目标对象属性被遗漏。

出现原因

Java的UnrecognizedPropertyException通常发生在以下情况:

  • 在使用Jackson反序列化JSON字符串到Java对象时,JSON字符串中包含了目标对象没有的属性。
  • 当JSON字符串中存在多余属性时,这些属性会默认被Jackson序列化成null,并且不会存储到目标对象中。
  • 目标对象中的属性名称与JSON字符串中的属性名称不匹配。
解决方案
  1. 删除JSON字符串中多余的属性。

在处理UnrecognizedPropertyException错误时,第一个要尝试的方法是删除JSON字符串中多余的属性。这是修复该错误最容易的方法,可以通过手动检查JSON字符串来实现。

  1. 添加JsonIgnoreProperties注释

由于目标Java类的属性(字段)与JSON字符串的属性不匹配,您可以使用Jackson注释来解决该问题。其中一种常见的注释类型是@JsonIgnoreProperties。使用该注释标记未在目标Java类中定义的属性(字段),以忽略JSON字符串中未识别的属性。

以下是一个例子:

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyObject {
    // class implementation
}
  1. 解析器设置

在序列化和反序列化Java对象时,Jackson使用它所谓的“ObjectMapper”。有几个设置可以用来控制序列化过程,其中一个选项是failOnUnknownProperties。如果设置为true(默认值),则ObjectMapper将在遇到未知属性时引发异常。可以通过将此值设置为false来禁用这一行为。

以下是一个例子:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
总结

Java的UnrecognizedPropertyException通常是因为 JSON 字符串中包含了多余的属性或者目标对象属性被遗漏。为了解决这个问题,我们可以删除JSON字符串多余的属性,使用JsonIgnoreProperties注释或配置解析器的设置,让其不在在遇到未知属性时引发异常。