java - 使用 Jackson 将 Json 文件映射到 POJO 需要 @JsonProperty

标签 java json jackson

我有一个 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 对象)。

在你的例子中,value1value2能见度为 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/

相关文章:

java - 类型转换比较器为子类工作

java - jackson 未能反序列化简单的 JSON

java - jackson 将对象转换为json字符串

java - 配置 Jackson 而不是使用 DateTimeFormat.ISO.DATE - 不工作

Java:GarbageCollectorMXBean getCollectionCount 抛出 java.io.IOException:客户端已关闭

java - GCS - 上传较大大小的文件时出现堆错误

java - Maven 和开放 Km 构建失败

javascript - 我如何在meteorjs中返回包含函数的对象?

javascript - 使用ajax将html表单以json格式发布到Django

php - Symfony 中的序列化和反序列化