我有一个班级:
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答案 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,我当然会建议在各种方法中添加空检查。