原文地址:https://github.com/alibaba/fastjson/wiki/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;
}
};
JSON.toJSONString(obj, filter); // 序列化的時候傳入filter
PropertyPreFilter 根據PropertyName判斷是否序列化
和PropertyFilter不同只根據object和name進行判斷,在調用getter之前,這樣避免了getter調用可能存在的異常。
public interface PropertyPreFilter extends SerializeFilter {
boolean apply(JSONSerializer serializer, Object object, String name);
}
NameFilter 序列化時修改Key
如果需要修改Key,process返回值則可
public interface NameFilter extends SerializeFilter {
String process(Object object, String propertyName, Object propertyValue);
}
ValueFilter 序列化是修改Value
public interface ValueFilter extends SerializeFilter {
Object process(Object object, String propertyName, Object propertyValue);
}
BeforeFilter 序列化時在最前添加內容
public abstract class BeforeFilter implements SerializeFilter {
protected final void writeKeyValue(String key, Object value) { ... }
// 需要實現的抽象方法,在實現中調用writeKeyValue添加內容
public abstract void writeBefore(Object object);
}
AfterFilter 序列化時在最前添加內容
public abstract class AfterFilter implements SerializeFilter {
protected final void writeKeyValue(String key, Object value) { ... }
// 需要實現的抽象方法,在實現中調用writeKeyValue添加內容
public abstract void writeAfter(Object object);
}