通过上面的例子可以看到,@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"))欢迎分享,转载请注明来源:内存溢出
评论列表(0条)