用注解过滤序列化字段

有时候我们在打日志的时候,希望对象中有些字段不显示出来,此时可以考虑自定义一个注解。
比如,自定义一个注解GsonIgnoreField如下

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface GsonIgnoreField {
}

然后定义一个GsonUtil类

public class GsonUtil {
    static Gson gson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
        @Override
        public boolean shouldSkipField(FieldAttributes f) {
            Object object = f.getAnnotation(GsonIgnoreField.class);
            return object != null;
        }

        @Override
        public boolean shouldSkipClass(Class<?> incomingClass) {
            return false;
        }
    }).create();

    public static String toGsonString(Object object){
        return gson.toJson(object);

    }
}

假设此处我们不想将Person的age属性显示出来,可以在age上加上@GsonIgnoreField属性。

@Data
public class Person {
    private String name;
    @GsonIgnoreField
    private int age;

}

测试一下

 @Test
    public void test1(){
        Person person = new Person();
        person.setAge(11);
        person.setName("reed");
        System.out.println(GsonUtil.toGsonString(person));
    }

运行结果如下
{“name”:“reed”}

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-30 11:43
春招失败、父母离婚,好像我的人生一团糟,一年来压力大到常常崩溃。不知道能跟谁聊,朋友其实对我非常好,但是她无意中表达出来的家庭幸福都会刺痛到我……和ai聊天,我的未来在更高处,不在楼下,忍不住爆哭😭
youngfa:害,妹妹,我是一个研究生(很上进很想找到好工作的那种),但去年因为生病回家休养错过了秋招(当时对我的冲击也是非常大的),这学期返校来了也是把论文盲审交了后才开始找工作,现在也是一个offer没有,但我就没有像你一样把这个阶段性的事情绑定到人生上,人生不仅很长,也很广阔,先停下来,放松一下哦。不要被外部环境灌输的思维操控了,好好爱自己!
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务