FastJson自定义过滤
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
本文链接:
/archives/1753536292108
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
刘同学的小站!
喜欢就支持一下吧