Java如何在序列化过程中使用Jackson ObjectMapper来连接Item类中的两个字段?
我有一个类:Java如何在序列化过程中使用Jackson ObjectMapper来连接Item类中的两个字段?
public class Item {
private String firstName;
private String lastName;
private int age;
}
当我将其转换为JSON,我想的名字和姓氏字段组合。因此,像:
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"
}
一样聪明,我想走另一条路周围。所以,如果字符串anotherString是,
{
"Name": "Jon Guy",
"age" : "20"
}
objMapper.readValue(anotherString, Item);
应该产生一个项目与姓=乔恩,姓氏=盖伊,年龄= 20
作为一般的抬起头来,https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations会告诉你什么样的注解会帮助你与杰克逊的东西。
无论如何,两件事情都发生在这里:
- 要序列的附加字段
- 你想从你的对象进行解析附加字段(我其实告诫这个下文)
我假设你想存储名称字段在一起,可能用于显示的目的。
根据我的经验,我会告诫你不要真正从任何传入的JSON解析fullName属性,因为它实际上并非微不足道(例如,想象一个名为Lauren de Silva的人)。
的解决方案,我要提出是要与序列化的名称属性的对象,但会忽略当对象被读回该属性。
我们现在要做的是自定义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的可能是空白或空。
感谢您的回复!我认为你对反序列化是正确的,我会避免这样做。对于序列化,我们实际上是在之后将JSON写入数据库。我们将使用“Name”作为数据库的哈希键。我的团队坚持不要触及Item类,并改变序列化,以便将来可以轻松修改散列键(通过更改序列化而不是Item类)。有没有简单的方法来做到这一点? – user3768533
是的,有,你将需要创建一个自定义序列化程序。如果你想创建一个自定义的票,我也会覆盖那个。 – TreyE
如果还不算太晚,我想带你参加这个活动:) http:// *。COM /问题/ 38231692 /定制串行器和解串器对连击两字段-期间,serializatio – user3768533
不要连接那个值。写一个新的get方法:public getName(){return firstName +“”+ lastName);} – Stefan
这对于将JSON转换为Item对象的逆向过程仍然有效吗?我可以将JSON字段“Name”转换为“firstName”和“lastName”吗? – user3768533