[英]Jackson serialize and wrap attributes into a new Object
以下类的序列化对象产生字符串
public class User implements Serializable{
private Integer id;
private String name;
private Integer pinCode;
private String city;
// getters /setters
}
{"id":1,"name":"XYZ","pinCode":123456,"city":"ABC"}
但是我们希望属性pinCode和city应该成为新的Json节点(例如地址节点)的一部分。
所以我对结果的期望是:
{
"id": 1,
"name": "XYZ",
"address": {
"pinCode": 123456,
"city": "ABC"
}
}
无需重新组织类结构并使用Json注释即可完成此操作
在@JsonUnwrapped的完全相反的行上
您可以使用以下解决方法(但最好使用JsonSerialize):
public class User implements Serializable{
private Integer id;
private String name;
@JsonIgnore
private Integer pinCode;
@JsonIgnore
private String city;
@JsonProperty("address")
public Map<String, Object> getAddress() {
Map<String, Object> map = new HashMap<>();
map.put("pinCode", pinCode);
map.put("city", city);
return map;
}
//Deserealization
public void setAddress(Map<String, Object> map) {
if(map!=null) {
city = (String) map.get("city");
pinCode = (Integer) map.get("pinCode");
}
}
// getters /setters
}
感谢@hemantvsn提供反序列化示例
添加另一个名为Address
类,如下所示:
public class Address implements Serializable {
private Integer pinCode;
private String city;
// getters /setters
}
然后在User
类中使用Address
类,如下所示:
public class User implements Serializable {
private Integer id;
private String name;
private Address address;
// getters /setters
}
现在,杰克逊给您提供json字符串,例如:
{
"id": 1,
"name": "XYZ",
"address": {
"pinCode": 123456,
"city": "ABC"
}
}
@JsonProperty(“ address.pinCode”)用于在json中设置字段名称。 请参阅文档以获取更多详细信息JsonProperty
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.