zoukankan      html  css  js  c++  java
  • fastjson过滤掉不需要返回的字段

    使用场景

    在项目中,后端查询数据库返回的字段需要过滤传给前端,或者只需要一部分字段

    方法一    new

    newVO,DTO类,实体类来解决  (太老土的做法)

    方法二   使用transient关键字  (密码,和身份证号字段多使用)   

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

    例子:   private transient String id;      (在多个接口中使用这个字段 ,如果不是都要过滤这个字段时候, 就不适合使用)

    方法三   使用注解@JSONField(serialize=false)   作用和使用情况同方法二

    例子: @JSONField(serialize=false) 

        private String id;

    方法四  使用fastjson属性过滤器SimplePropertyPreFilter    (推荐使用 更灵活)

               SimplePropertyPreFilter实现了PropertyPreFilter 

    例子:  Student 相当于VO,DTO类或者实体类

    要输出字段为空的情况  增加一个参数 SerializerFeature.WriteMapNullValue

    public class Student {
    
        /** 学号 */
        private long id;
    
        private String name;
    
        private int age;
    
        /** 年级 */
        private int grade;
    
        /** 专业 */
        private String major;
    
        /** 学校 */
        private String school;
    
        public long getId() {
            return id;
        }
    
        public void setId(long 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;
        }
    
        public int getGrade() {
            return grade;
        }
    
        public void setGrade(int grade) {
            this.grade = grade;
        }
    
        public String getMajor() {
            return major;
        }
    
        public void setMajor(String major) {
            this.major = major;
        }
    
        public String getSchool() {
            return school;
        }
    
        public void setSchool(String school) {
            this.school = school;
        }
    
        public Student(long id, String name, int age, int grade, String major, String school) {
            super();
            this.id = id;
            this.name = name;
            this.age = age;
            this.grade = grade;
            this.major = major;
            this.school = school;
        }
    
        
    }
    Student
    public class Test {
        public static void main(String[] args) {
    
            List<Student> students = Arrays.asList(
        
                    new Student(200123,"苏明",20,1,"土木工程",null),
                    new Student(200456,"张阿凡",21,2,"机械工程",null),
                    new Student(200789,"范总",20,3,"计算机工程","苏州工业大学")
                
                    );
            //students模拟数据库查出来的数据
            //指定要返回的字段    没有在里面的字段就不会返回 达到过滤的效果
            String resultStr=filterFieldsJson(students,Student.class,"name","grade","school");
            
            System.out.println(resultStr);
    
        }
        //过滤方法  字段为空也输出 增加一个参数 SerializerFeature.WriteMapNullValue
        public static String filterFieldsJson(Object src, Class<?> clazz, String... args) {
            SimplePropertyPreFilter filter = new SimplePropertyPreFilter(clazz, args);
            return JSON.toJSONString(src, filter,SerializerFeature.WriteMapNullValue);
        }
    }
    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    ES6对象展开运算符
    Vue中keep-alive的深入理解和使用
    彻底明白VUE修饰符sync
    函数去抖和函数节流
    vue cli4.0 配置环境变量
    什么是process.env?
    new Function和with
    inline-block元素没有对齐的解决方案及总结
    【译文】为什么你的浏览器会限制并发网络调用的数量?
    高德地图Marker缩放位置变化
  • 原文地址:https://www.cnblogs.com/wf-zhang/p/12125615.html
Copyright © 2011-2022 走看看