Java对象转JSON时---如何动态添加字段呢?
下文笔者讲述java代码将对象转JSON后,添加字段的方法分享,如下所示
User类:
json动态添加字段的实现思路:
方式1:
对象中添加一个map
为map添加元素,即可实现动态添加json字段
方式2:
对象转换为JSON之
然后操作json字符串
例:User类:
@Data
public class User {
private String name;
private Integer age;
}
序列化成JSON时,处理动态增加一个sex字段
{
"name": "maomao",
"age": 19,
"sex": "nv"
}
方法一
使用@JsonAnyGetter注解进行扩展User的自定义属性改造User类:
@Data
public class User {
private String name;
private Integer age;
private Map<String, String> otherAttributes = new HashMap<>();
// 利用JsonAnyGetter可以进行序列化时,将不包含在Java类属性中的其他属性添加到JSON字符串中
@JsonAnyGetter
public Map<String, String> getOtherAttributes() {
return this.otherAttributes;
}
// 利用JsonAnySetter可以进行反序列化时,将不包含在Java类属性中的其他属性放到map里面
@JsonAnySetter
public void setOtherAttribute(String key, String value) {
this.otherAttributes.put(key, value);
}
}
示例
User user = new User();
user.setName("猫猫");
user.setAge(18);
user.setOtherAttribute("sex", "女");
ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = objectMapper.writeValueAsString(user);
System.out.println(jsonStr);
方法二
使用ObjectNode类动态增加JSON属性
User user = new User();
user.setName("猫猫");
user.setAge(18);
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode jsonNodes = objectMapper.valueToTree(user);
jsonNodes.put("sex", "女");
String jsonStr = objectMapper.writeValueAsString(user);
System.out.println(jsonStr);
两种操作方式的区别
方法一:
需要修改原始DTO类,但是可以增加反序列时获取额外信息的功能
方法二:
无需修改原始DTO类,但是功能仅限于序列化时的动态修改
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


