Java如何在序列化期间使用Jackson ObjectMapper连接Item类中的两个字段?

时间:2016-06-28 19:26:50

标签: java json serialization jackson

我有一个班级:

public class Item {
    private String firstName;
    private String lastName;
    private int age;
} 

当我将其转换为JSON时,我想组合firstName和lastName字段。如下所示:

ObjectMapper objMapper = createMapper();
Item item = new Item("Bob", "Smith", 190);
String json = objMapper.writeValueAsString(item);

但我希望json看起来如下:

{
    "Name": "Bob Smith",
    "age" : "190"
}

而不是:

{
    "firstName": "Bob",
    "lastName" : "Smith",
    "age" : "190"
}

同样聪明,我想反过来说。所以如果String anotherString是,

{
    "Name": "Jon Guy",
    "age" : "20"
}

objMapper.readValue(anotherString, Item);

应生成一个名为= Jon,lastName = Guy,age = 20

的Item

1 个答案:

答案 0 :(得分:1)

作为一般人,https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations会告诉你哪些注释可以帮助你解决杰克逊的问题。

无论如何,这里发生了两件事:

  • 您想要序列化其他字段
  • 你想从你的对象中解析出那个额外的字段(我实际上会在下面提醒你)

我假设您要将名称字段存储在一起,可能用于显示目的。

根据我的经验,我要提醒你不要在任何传入的JSON中解析fullName属性,因为它实际上是非常重要的(例如,想象一个名叫Lauren de Silva的人)。

我将要呈现的解决方案是使用name属性序列化对象,但在读回对象时将忽略该属性。

我们要做的是定制您的POJO,而不是做任何特殊的序列化代码:

public class Item {
  private String firstName;
  private String lastName;
  private int age;

  @JsonProperty("Name",access=Access.READ_ONLY)
  public String getName() {
    return(firstName + " " + lastName);
  }
} 

如果你的firstName或lastName可以为空或null,我当然会建议在各种方法中添加空检查。