首页 > 编程语言 >Java对象转JSON动态设置字段

Java对象转JSON动态设置字段

时间:2023-01-16 10:33:32浏览次数:39  
标签:Java String private JSON user new 动态 User

需求

User类:

@Data
public class User {
	private String name;
	private Integer age;
}

序列化成JSON时,处理动态增加一个sex字段

{
	"name": "张三",
	"age": 20,
	"sex": "男"
}

方法一
利用@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(20);
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(20);

ObjectMapper objectMapper = new ObjectMapper();
ObjectNode jsonNodes = objectMapper.valueToTree(user);
jsonNodes.put("sex", "男");

String jsonStr = objectMapper.writeValueAsString(user);
System.out.println(jsonStr);

总结
方法一 需要修改原始DTO类,但是可以增加反序列时获取额外信息的功能
方法二 不需要修改原始DTO类,但是功能仅限于序列化时的动态修改
————————————————

标签:Java,String,private,JSON,user,new,动态,User
From: https://www.cnblogs.com/wzqnxd/p/17054831.html

相关文章

  • 如何动态修改属性文件×××.properties的某些内容
    我们在项目中可以把一些属性配置到×××.properties中,比如数据库连接信息。现在问题来了,我的属性文件中有一些值是需要根据后台得到的数据来动态改变的,请问这个要怎么实现......
  • 【译】15 个有用的 JavaScript 技巧
    原文地址:https://javascript.plainenglish.io/15-useful-javascript-tips-814eeba1f4fd1)数字分隔符为了提高数字的可读性,可以使用下划线作为分隔符。constlargeNumber......
  • android studio 报错com.android.build.api.transform.TransformException: java.lang
    报错com.android.build.api.transform.TransformException:java.lang.RuntimeException或者其他一些出现gradle报错字样,这是因为部分第三方库需要较高gradle版本才能跑起......
  • [VS Code] 解决JSON文件注释提示Comments are not permitted in JSON.
    问题:打开JSON文件,发现注释中出现一堆问题提示,鼠标指示上去提示CommentsarenotpermittedinJSON.  解决:1.点击右下角的JSON. 2.输入json,找到jsonc并点击......
  • Java方法详解
    Java方法详解何为方法Java方法是语句的集合,它们在一个执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方......
  • JavaScript是怎样实现继承的?
    一、是什么继承(inheritance)是面向对象软件技术当中的一个概念。如果一个类别B“继承自”另一个类别A,就把这个B称为“A的子类”,而把A称为“B的父类别”也可以称“A是B的超......
  • java多线程基础
    java多线程编程课程视频来源:多线程06:初识并发问题_哔哩哔哩_bilibili线程简介进程编写的静态代码文件,经过编译成为可执行的二进制文件,执行后它被加载至内存,被CPU执行。......
  • springboot之json/yml配置文件的读取
    配置文件读取项目根目录的config目录下person.yml,文件夹如下person:name:qinjiangage:3happy:falsebirth:2000/01/01maps:{k1:v1,k2:v2}lis......
  • JSON
    1.概念:JavaScriptObjectNotation  JavaScript对象表示法   varp={"name":"zhangsan","age":23,"sex":"男"}    *json现在多用于储存和交换文本信息的语法......
  • JavaScript学习笔记—window对象
    window对象浏览器为我们提供了一个window对象,可以直接访问window对象代表的是浏览器窗口,通过该对象可以对浏览器窗口进行各种操作,除此之外window对象还负责存储JS中的内......