我有一个 Java 类文件,如下所示:
public class ToBeMapped {
String value1;
int value 2;
}
然后我有一个名为“test.json”的 JSON 文件,如下所示:
{
"value1": "hellow world",
"value2": 12345
}
然后我尝试将 JSON 文件映射到另一个 Java 文件中的“TobeMapped”对象:
public class Testing {
public void justTesting() throws IOException {
ToBeMapped temp = new ObjectMapper().readValue(new File("path/to/test.json"), ToBeMapped.class);
}
}
这会给我以下错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "value1" ...
如果我如下所示在每个类变量之前添加 @JsonProperty
,我可以将 JSON 文件映射到 POJO 而不会出现任何错误。
public class ToBeMapped {
@JsonProperty
String value1;
@JsonProperty
int value 2;
}
为了让 Jackson 的映射器将 JSON 文件/流映射到对象,我是否必须将此 header 添加到每个类变量,这是真的吗? 或者我的代码中遗漏了什么?
谢谢。
最佳答案
默认情况下,Jackson 的自动检测绑定(bind) public
领域和public
用于反序列化的 setter (将 JSON 表示形式转换为 Java 对象)。
在你的例子中,value1
和 value2
能见度为 package-protected
因此不会被 Jackson 自动检测到。
您有几个选择 - 将它们的可见性更改为 public
或使用 @JsonProperty
帮助 Jackson 识别它们,或者您可以更改 ObjectMapper
自动检测设置包括 package-protected
字段:
-
ObjectMapper
配置:mapper.setVisibility(PropertyAccessor.FIELD, Visibility.NON_PRIVATE);
- 类注释:
@JsonAutoDetect(fieldVisibility = Visibility.NON_PRIVATE)
关于java - 使用 Jackson 将 Json 文件映射到 POJO 需要 @JsonProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49076059/