FastJson toString过滤指定的对象属性

2024-04-25 03:58

本文主要是介绍FastJson toString过滤指定的对象属性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在做一个需求时,遇到一个问题,在把Java对象用fastjson转成json字符串时,需要过滤掉Java对象中的指定属性,通过搜索资料,解决了该问题,这里做个总结,具体实现可以参考本文中介绍的几种方式。

数据样例

本文中用到的Java对象结构和使用的对象实例分别如下:

对象结构
public class Persion {private String id;private String name;private int age;public Persion(String id, String name, int age) {this.id = id;this.name = name;this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
对象实例
Persion persion = new Persion("10010", "jason", 101);
正常的json字符串如下:
{"age":101,"id":"10010","name":"jason"}

一、使用transient关键字

把需要过滤掉属性使用transient关键字修饰,这样在调用JSON的toString方法时,被transient修饰的属性不会出现在最终的json字符串中,举例如下:

private transient String id;

再调用JSON.toString()方法时,id属性将被过滤掉,结果如下:

{"age":101,"name":"jason"}

二、使用注解

还是以id属性为例,使用注解@JSONField(serialize=false),示例如下:

@JSONField(serialize=false)
private String id;

同样,再调用JSON.toString()方法时,id属性将被过滤掉,结果如下:

{"age":101,"name":"jason"}

三、使用属性过滤器PropertyFilter

使用过滤器PropertyFilter,使用示例如下:

        //创建Java对象Persion persion = new Persion("10010", "jason", 101);//创建PropertyFilter对象,并重载apply方法PropertyFilter propertyFilter = new PropertyFilter(){boolean flag = true;@Overridepublic boolean apply(Object obj, String name, Object value) {if(name.equalsIgnoreCase("id")){flag = false;}return flag;}};//调用toJSONString方法时,传入PropertyFilter对象String jsonStr = JSON.toJSONString(persion, propertyFilter);

得到的json字符串如下:

{"age":101,"name":"jason"}
PropertyFilter属性过滤器说明:

(1)当apply方法返回TRUE时,该属性输出到json字符串中,apply方法的Java doc如下:

    /*** @param object the owner of the property* @param name the name of the property* @param value the value of the property* @return true if the property will be filtered out, false otherwise*/boolean apply(Object object, String name, Object value);

(2)可以同时使用属性名属性值过滤,示例如下:

            @Overridepublic boolean apply(Object obj, String name, Object value) {if(name.equalsIgnoreCase("id") && "10011".equals(value)){flag = false;}else{flag = true;}return flag;}

实现的效果为只过滤掉属性名称为idid取值为10011的属性,结果如下:

{"age":101,"id":"10010","name":"jason"}

这里id并没有被过滤掉,因为value取值不是10011

(3)警告:

如果某一个属性使得flag取值为false,后续所有的flag将都为fasle,导致属性均不输出,为了避免这样的错误出现,所以(2)中的示例中增加了else{ flag = true;}代码。

四、使用属性过滤器SimplePropertyPreFilter

示例如下,只有出现在SimplePropertyPreFilter构造器参数中的属性才会被输出:

SimplePropertyPreFilter simplePropertyPreFilter = 
new SimplePropertyPreFilter(Persion.class, "name", "age");

输出json结果如下:

{"age":101,"name":"jason"}

属性id未被输出,因为id未传入SimplePropertyPreFilter构造器参数。

五、方式对比

  1. transient关键字和注解的优先级高于属性过滤器,即如下情形都将导致属性过滤器不起作用。:
    • 同时使用transient关键字和属性过滤器;
    • 同时使用注解和属性过滤器;
  2. 使用属性过滤器PropertyFilter最为灵活,不仅可以根据属性名过滤,还可以根据属性取值过滤。

这篇关于FastJson toString过滤指定的对象属性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933644

相关文章

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja