如何使用 Jackson 将未包装的 JSON 字段映射到包装对象?

How to map unwrapped JSON field to wrapped object with Jackson?

我有一个JSON的结构

{
  "name": "...",
  "age": "..."
}

我必须将此 JSON 映射到以下 class 对象

Class Response {
  Person person;
}

Class Person {
 String name;
 String age;
}

是否有任何 Jackson 注释可以帮助我在不更改 JSON 结构或修改 class 结构的情况下执行此操作?

你好,这是一个将 json 绑定到对象中的示例 https://www.tutorialspoint.com/jackson/jackson_data_binding.htm

只需在 Response class 中的 Person person; 上添加 @JsonUnrapped 注释。顺便说一下,Java 中的 classes 是由 class 定义的,而不是 Class.你的代码不会编译失败吗?如果你还没有添加 getters/setters 到你的 classes 中

响应 class:

public class Response {
    @JsonUnwrapped
    Person person;

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}

class:

public class Person {
    String name;
    String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

这里有一个小的测试代码来验证它:

    String json="{\n" +
            "  \"name\": \"Joe\",\n" +
            "  \"age\": \"30\"\n" +
            "}";

    ObjectMapper mapper = new ObjectMapper();
    
    // convert JSON to Response
    final Response response = mapper.readValue(json, Response.class);
    System.out.println(response.getPerson().getName());
    System.out.println(response.getPerson().getAge());

    // convert Response to JSON string
    final String s = mapper.writeValueAsString(response);
    System.out.println(s);