fastjson 过滤不需要的字段或者只要某些字段

转载自https://blog.csdn.net/stubbornness1219/article/details/52947013

/*
 * 第一种:在对象响应字段前加注解,这样生成的json也不包含该字段。
 * @JSONField(serialize=false)  
 * private String name;  
 */

/*
 * 第二种:在对象对应字段前面加transient,表示该字段不用序列化,即在生成json的时候就不会包含该字段了。
 * private transient  String name;  
 */

/*
 * 第三种:使用fastjson的拦截器
 * PropertyFilter profilter = new PropertyFilter(){  
  
            @Override  
            public boolean apply(Object object, String name, Object value) {  
                if(name.equalsIgnoreCase("last")){  
                    //false表示last字段将被排除在外  
                    return false;  
                }  
                return true;  
            }  
              
        };  
        json = JSON.toJSONString(user, profilter);  
        System.out.println(json);  
 */

/*
 * 第四种,直接填写属性
 * SimplePropertyPreFilter filter = new SimplePropertyPreFilter(TTown.class, "id","townname");  
    response.getWriter().write(JSONObject.toJSONString(townList,filter));   

 */

fastJson 过滤器参考 GitHub该项目的介绍

参考 fastjson 过滤不需要序列化的属性

### 如何在 FastJSON 中使用忽略字段的注解 为了实现序列化过程中忽略特定字段的功能,在 FastJSON 提供了几种同的方法来满足这一需求。 #### 使用 `@JSONField` 注解 当希望在对象转换成 JSON 字符串的过程中排除某些字段时,可以在类成员变量上应用 `@JSONField(serialize = false)` 来指定参与序列化的属性[^2]。这种方式适用于想让某个具体字段出现在最终生成的 JSON 数据中的情况: ```java import com.alibaba.fastjson.annotation.JSONField; public class User { private String username; @JSONField(serialize = false) private String password; // 此字段会被序列化到 JSON 输出中 public User(String username, String password){ this.username = username; this.password = password; } } ``` 需要注意的是,有时可能会遇到该注解放置后起作用的情况,这可能是由于配置或其他因素引起的,需排查相关环境设置以确保其正常工作。 #### 自定义过滤器方式 除了利用内置注解外,还可以通过创建自定义的价值过滤器 (`ValueFilter`) 实现更灵活的数据处理逻辑。例如,下面展示了如何构建一个简单的价值过滤器用于控制哪些数据项应该被省略掉[^3]: ```java import com.alibaba.fastjson.serializer.ValueFilter; public class CustomValueFilter implements ValueFilter { private final Set<String> excludedFields; public CustomValueFilter(Set<String> fieldsToExclude) { this.excludedFields = Collections.unmodifiableSet(new HashSet<>(fieldsToExclude)); } @Override public Object process(Object object, String name, Object value) { if (excludedFields.contains(name)) { return null; // 或者返回其他特殊标记表示跳过此字段 } else { return value; } } } ``` 之后可将此类实例注册给 FastJSON 序列化工具链以便生效: ```java // 创建并初始化过滤器 CustomValueFilter filter = new CustomValueFilter(Arrays.asList("password")); // 将过滤器应用于 JSON 配置 SerializeConfig config = SerializeConfig.globalInstance; config.setAsmEnable(false); // 如果需要的话禁用 ASM 加速模式 JSON.toJSONString(userObject, filter); ``` 以上两种方案提供了同层次上的灵活性和支持,可以根据实际应用场景选择最合适的解决方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值