fastjson判断是否包含_Fastjson-详解SerializeFilter,格式化对
象字段
遇到⼀个奇葩场景,维护⼀个⽼的程序, 应⽤换了个服务⽅. 要切接⼝. 但有以下问题.
接⼝逻辑稍有不同 , 需要⾃⼰按原接⼝⽂档,重组逻辑.
接⼝字段名,字段类型改动较⼤. 但还要按原接⼝⽂档返回数据给前端.
接⼝逻辑改动还好 , 但这个转字段和类型 ,真的是头⼤啊.....
⼤⼩写: abcDef --> AbcDef , ABC-->abc
全称,缩写: result --> Res , detail --> DE,message --> msg
字段名称不同: data --> obj , amount --> money
FastJson都可以解决.
SerializeFilter
SerializeFilter是通过编程扩展的⽅式定制序列化。fastjson⽀持6种SerializeFilter,⽤于不同场景的定制序列化。
PropertyPreFilter 根据PropertyName判断是否序列化
PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
NameFilter 修改Key,如果需要修改Key,process返回值则可
ValueFilter 修改Value
BeforeFilter 序列化时在最前添加内容
AfterFilter 序列化时在最后添加内容
PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
public interface PropertyFilter extends SerializeFilter {
boolean apply(Object object, String propertyName, Object propertyValue);
}
可以通过扩展实现根据object或者属性名称或者属性值进⾏判断是否需要序列化。例如:
PropertyFilter filter = new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
if ("id".equals(name)) {
int id = ((Integer) value).intValue();
return id >= 100;
}
return false;
}
};
PropertyPreFilter 根据PropertyName判断是否序列化
和PropertyFilter不同只根据object和name进⾏判断,在调⽤getter之前,这样避免了getter调⽤可能存在的异常。public interface PropertyPreFilter extends SerializeFilter {
boolean apply(JSONSerializer serializer, Object object, String name);
fastjson忽略属性}
NameFilter 序列化时修改Key
如果需要修改Key,process返回值则可
public interface NameFilter extends SerializeFilter {
String process(Object object, String propertyName, Object propertyValue);
}
fastjson内置⼀个PascalNameFilter,⽤于输出将⾸字符⼤写的Pascal风格。 例如:
import com.alibaba.fastjson.serializer.PascalNameFilter;
Object obj = ...;
String jsonStr = JSONString(obj, new PascalNameFilter());
ValueFilter 序列化时修改Value
public interface ValueFilter extends SerializeFilter {
Object process(Object object, String propertyName, Object propertyValue);
}
BeforeFilter 序列化时在最前添加内容
在序列化对象的所有属性之前执⾏某些操作,例如调⽤ writeKeyValue 添加内容
public abstract class BeforeFilter implements SerializeFilter {
protected final void writeKeyValue(String key, Object value) { ... }
// 需要实现的抽象⽅法,在实现中调⽤writeKeyValue添加内容
public abstract void writeBefore(Object object);
}
AfterFilter 序列化时在最后添加内容
在序列化对象的所有属性之后执⾏某些操作,例如调⽤ writeKeyValue 添加内容
public abstract class AfterFilter implements SerializeFilter {
protected final void writeKeyValue(String key, Object value) { ... }
// 需要实现的抽象⽅法,在实现中调⽤writeKeyValue添加内容
public abstract void writeAfter(Object object);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。