向 POJO 添加 get-Method 导致 JsonMappingException
Adding get-Method to POJO causes JsonMappingException
我有一个 POJO class,用于使用 Jackson 进行反序列化。此 class 包含所有 class 变量的默认构造函数和 getter 和 setter 方法。
因为我需要一些关于 POJO 内容的高级逻辑,所以我添加了一个方法
public String getRootModuleName()
但现在我的单元测试在反序列化过程中失败,出现以下异常:
com.fasterxml.jackson.databind.JsonMappingException: No value present (through reference chain: com.POJO["rootModuleName"])
对我来说,Jackson 似乎识别了一个 get-Method 并因此得出,必须有一个类似的 JSON 属性 用于反序列化。
当我用 @JsonIgnore 注释方法时,测试成功。
有人可以确认 Jackson 通过方法名称的 get-prefix 识别所需的属性吗?
@JsonIgnore 是一个好的解决方案还是我应该将业务逻辑与 POJO 设计分离?
您完全正确,JSON Jackson 通过“get”前缀识别 属性 吸气剂。因此,在您的情况下,可能的解决方案是像您一样使用 @JsonIgnore
,或者重命名您的方法以具有不同的前缀,例如“检索”、“提取”等。我会说使用 @JsonIgnore
是最好的方法。所以,简而言之,你的解决方案是正确的
我有一个 POJO class,用于使用 Jackson 进行反序列化。此 class 包含所有 class 变量的默认构造函数和 getter 和 setter 方法。
因为我需要一些关于 POJO 内容的高级逻辑,所以我添加了一个方法
public String getRootModuleName()
但现在我的单元测试在反序列化过程中失败,出现以下异常:
com.fasterxml.jackson.databind.JsonMappingException: No value present (through reference chain: com.POJO["rootModuleName"])
对我来说,Jackson 似乎识别了一个 get-Method 并因此得出,必须有一个类似的 JSON 属性 用于反序列化。
当我用 @JsonIgnore 注释方法时,测试成功。
有人可以确认 Jackson 通过方法名称的 get-prefix 识别所需的属性吗?
@JsonIgnore 是一个好的解决方案还是我应该将业务逻辑与 POJO 设计分离?
您完全正确,JSON Jackson 通过“get”前缀识别 属性 吸气剂。因此,在您的情况下,可能的解决方案是像您一样使用 @JsonIgnore
,或者重命名您的方法以具有不同的前缀,例如“检索”、“提取”等。我会说使用 @JsonIgnore
是最好的方法。所以,简而言之,你的解决方案是正确的