fastjson的值过滤器ValueFilter

本文介绍了如何在Fastjson中使用ValueFilter对对象的'手机'字段进行值过滤,示例了如何创建并应用一个简单的ValueFilter,以隐藏敏感信息。输出结果展示了过滤后的序列化JSON对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fastjson的值过滤器ValueFilter

使用fastjson序列化对象时,可以添加 值过滤器(ValueFilter),以此来对序列化出来的值做统一处理,步骤如下:

1、实现com.alibaba.fastjson.serializer.ValueFilter接口,实现其Object process(Object object, String name, Object value)方法,根据需要修改返回的值。
2、调用fastjson序列化对象时,使用此filter

实现ValueFilter接口:

public class SimpleValueFilter implements ValueFilter {
    public Object process(Object object, String name, Object value) {
        // 只要字段名中包含mobile,则值输出为一串星号
        if (name.toLowerCase().contains("mobile")) {
            return "****";
        }
        return value;
    }
}

在序列化时使用值过滤器:

public class Main {
    public static void main(String[] args) {
        MyObject obj = new MyObject();
        obj.setName("YR");
        obj.setMobile("15977198020");
        obj.setUserMobile("15869198021");
        System.out.println(JSON.toJSONString(obj, new SimpleValueFilter()));
    }
}

输出结果:
{“mobile”:“",“name”:“YR”,“userMobile”:"”}

### 如何在 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); ``` 以上两种方案提供了不同层次上的灵活性和支持,可以根据实际应用场景选择最合适的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值