jackson - 如何使用自定义对象名序序列化嵌套对象?

时间:2015-06-10 23:07:51

标签: json serialization jackson

以下是一个例子:

class Person {

     String name;
     Address addressGiven;

     //getters and setters

    class Address {

     @JsonProperty(name="stno")
     private String StreetNo

     @JsonProperty(name="type")
     private AddressType addType;

     public void setstno(String stno){
     if (this.addressGiven==null)
            addressGiven=new Address();
     addressGiven.setStno(stno);
     }

    public void setType(String type) {
        if (addressGiven==null){
        addressGiven=new Address();
    }
    addressGiven.setType(AddressType.valueOf(type));
    }

    // other getters and setters
   }
}

AddressType.java

Enum AddressType {
HOME,
OFFICE,
BUSINESS,
DEFAULT;
}

在我回答我的问题之前需要注意两点:

  1. 内部地址
  2. 实例属性addType属于enum type
  3. 当我序列化对象时:

    Person person = new Person();
    Person.setStNo("1234");
    person.setType("HOME");
    
          ObjectMapper mapper = new ObjectMapper();
          String body = mapper.writeValueAsString(person);
          System.out.println(body);
    
    I expect: 
        {
          "addressGiven: 
                     { "stno" : "1234",
                       "type" : HOME,
                     }
        }
    

    但我得到的是:

    { "streetNo" : "1234"}

    三个值得注意的差异

    1. 嵌套json缺失
    2. streetNo但未返回stno
    3. 不存在addressType。
    4. 为什么是预期的json(即内部没有返回。我在哪里遗漏了一些注释? 我浏览了杰克逊的文档。但不能早点弄清楚。所以我在这里?

0 个答案:

没有答案