FastJSON的SerializeFilter接口及其子接口主要用于定制化序列化过程,以下是主要子接口及其功能:

可以使用的filter过滤钩子

PropertyPreFilter

  • 作用:根据属性名(PropertyName)判断是否参与序列化

  • 典型应用:字段级过滤控制16

PropertyFilter

  • 作用:同时根据属性名和属性值(PropertyName + PropertyValue)判断是否序列化

  • 典型应用:动态字段过滤(如空值过滤)6

/**
 * 用于过滤掉图片格式字段
 */
public class FastJsonNotFileImagePropertyFilter implements PropertyFilter {
    @Override
    public boolean apply(Object object, String name, Object value) {
        if(Arrays.asList(SignUtil.NOT_IMG_FILE).contains(name)){
            return false;
        }
        return true;
    }
}
//过滤掉文件格式的字段
public static FastJsonNotFileImagePropertyFilter notFileImageFilter = new FastJsonNotFileImagePropertyFilter();

JSONObject jb = JSONObject.parseObject(JSONObject.toJSONString(r,FastJsonFilterConfig.notFileImageFilter));

NameFilter

  • 作用:修改JSON键名(Key)

  • 典型应用:字段名重命名/格式化16

ValueFilter

  • 作用:修改属性值(Value)

  • 典型应用:数据脱敏/格式转换16

/**
 * 过滤空值
 */
public static ValueFilter valueFilter = new ValueFilter () {
    @Override
    public Object process(Object obj, String key, Object value) {
        if(value == null || "".equals(value.toString())){
            return null;
        }
        return value;
    }
};
public static ValueFilter valueFilter = (obj, key, value) -> {
        if(null == value){
            return "";
        } else if(value instanceof String){
            return value;
        } else if(value instanceof byte[]) {
            return ByteUtil.bytesToHex((byte[])value);
        } else if(value instanceof TlvParser.TlvEntity){
            TlvParser.TlvEntity tlv = (TlvParser.TlvEntity) value;
            if(null == tlv.getItems() || tlv.getItems().isEmpty()){
                return "";
            } else {
                return ByteUtil.bytesToHex(TlvParser.encode(tlv.getItems()));
            }
        }
        return value;
    };

String planText = JSON.toJSONString(req, valueFilter);

BeforeFilter

  • 作用:在序列化对象前添加内容

  • 典型应用:添加元数据前缀6

AfterFilter

  • 作用:在序列化对象后追加内容

  • 典型应用:添加校验后缀6

ContextValueFilter‌(特殊变体)

  • 作用:带上下文信息的属性值处理

  • 典型应用:根据序列化上下文动态处理值1

文章作者: 刘同学
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 刘同学的小站
后端 Java
喜欢就支持一下吧