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类,但是功能仅限于序列化时的动态修改
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。