Jackson全面解析--注解全讲解十二(动态添加字段@JsonAppend)

Jackson全面解析--注解全讲解十二(动态添加字段@JsonAppend),第1张

有时候我们需要在不改变类的属性字段的情况下,添加字段,Jackson提供了@JsonAppend注解来实现这个功能,使用方式如下

通过上面的例子可以看到,@JsonAppend提供了两种方式来动态的添加虚拟字段

1 attrs

此种方式需要在序列化时候手动的添加Attribute,如下

om.writerFor(CombineJacksonAnnotation.JsonPropertyPojo.class).withAttribute("age","10").withAttribute("height","12")

2 props

此种方式比较灵活,但是要实现一个VirtualBeanPropertyWriter类即可,如果真的有这种需求,推荐使用第二种方式来实现

jackson中,指定包含哪些属性、忽略哪些属性的注解:

用于标记忽略一个或多个属性。可以注解在类上、构造函数、方法、字段上。

@JsonIgnore注解用于在字段级别标记要忽略的属性。注意:系列化和反系列化时都会被忽略。

1、bean

2、测试

3、控制台输出

反系列化时,json数据中明明包含了category值,但是最后Article对象的category属性值依然为null。就是因为使用了JsonIgnore。

我们可以使用@JsonInclude排除某些empty、null、默认值的属性。

2、controller

没有在Result类上加 @JsonInclude(JsonInclude.Include.NON_NULL) 注解时,返回的响应:

加了之后的返回的响应:

默认情况下,jackson获取public权限的字段进行系列化和反系列化。如果没有public权限的字段,就会去获取public修饰的getter/setter。使用 JsonAutoDetect注解,我们就可以修改默认的行为。比如,下面的案例,即使字段都是private的、也没有getter/setter,也照样获取字段。

1、bean

首先,我们定义一个属性id/name都私有的而且没有getter/setter的一个bean

2、反系列化测试:

报错:

3、系列化测试

报错:

4、bean上加上注解

5、再次分别测试反系列化、系列化

都运行正常,分别打印:

下载这几个包,导入项目, JSONObject obj= new JSONOjbect().fromObject(test)JSONObject json= new JSONOjbect().fromObject(obj.getObject("xxx"))System.out.println(json.getString("A"))System.out.println(json.getString("B"))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11528076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存