Gson: How to exclude specific fields from Serialization without annotations

后端 未结 15 1630
后悔当初
后悔当初 2020-11-22 05:39

I\'m trying to learn Gson and I\'m struggling with field exclusion. Here are my classes

public class Student {    
  private Long                id;
  privat         


        
15条回答
  •  迷失自我
    2020-11-22 06:06

    I came up with a class factory to support this functionality. Pass in any combination of either fields or classes you want to exclude.

    public class GsonFactory {
    
        public static Gson build(final List fieldExclusions, final List> classExclusions) {
            GsonBuilder b = new GsonBuilder();
            b.addSerializationExclusionStrategy(new ExclusionStrategy() {
                @Override
                public boolean shouldSkipField(FieldAttributes f) {
                    return fieldExclusions == null ? false : fieldExclusions.contains(f.getName());
                }
    
                @Override
                public boolean shouldSkipClass(Class clazz) {
                    return classExclusions == null ? false : classExclusions.contains(clazz);
                }
            });
            return b.create();
    
        }
    }
    

    To use, create two lists (each is optional), and create your GSON object:

    static {
     List fieldExclusions = new ArrayList();
     fieldExclusions.add("id");
     fieldExclusions.add("provider");
     fieldExclusions.add("products");
    
     List> classExclusions = new ArrayList>();
     classExclusions.add(Product.class);
     GSON = GsonFactory.build(null, classExclusions);
    }
    
    private static final Gson GSON;
    
    public String getSomeJson(){
        List list = getEntitiesFromDatabase();
        return GSON.toJson(list);
    }
    

提交回复
热议问题