杰克逊嵌入式Java对象的反序列化

vij*_*jay 11 java json jackson deserialization

我必须使用Jackson库将json反序列化为Customer类

{
   "code":"C001",
   "city": "Pune",
   "street": "ABC Road"
}
Run Code Online (Sandbox Code Playgroud)

和类作为

class Address{
    String city;
    String street;
}

class Customer{
    String code;
    Address address;
}
Run Code Online (Sandbox Code Playgroud)

我在堆栈Java jackson嵌入式对象反序列化中发现了类似的问题

但答案不适用于我的情况.另外我只想使用杰克逊图书馆.

如何将此json映射到Customer对象?

Ale*_*lov 6

您可以在客户类的字段上放置@JsonUnwrapped注释Address.这是一个例子:

public class JacksonValue {
    final static String JSON = "{\n"
            +"   \"code\":\"C001\",\n"
            +"   \"city\": \"Pune\",\n"
            +"   \"street\": \"ABC Road\"\n"
            +"}";

    static class Address {
        public String city;
        public String street;

        @Override
        public String toString() {
            return "Address{" +
                    "city='" + city + '\'' +
                    ", street='" + street + '\'' +
                    '}';
        }
    }

    static class Customer {
        public String code;
        @JsonUnwrapped
        public Address address;

        @Override
        public String toString() {
            return "Customer{" +
                    "code='" + code + '\'' +
                    ", address=" + address +
                    '}';
        }
    }


    public static void main(String[] args) throws IOException {
        final ObjectMapper mapper = new ObjectMapper();
        System.out.println(mapper.readValue(JSON, Customer.class));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

 Customer{code='C001', address=Address{city='Pune', street='ABC Road'}}
Run Code Online (Sandbox Code Playgroud)