Fastjson API 序列化過濾器
Fastjson API 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); }
fastjson內建一個PascalNameFilter,用來輸出將首字大寫的Pascal風格。例如:
import com.alibaba.fastjson.serializer.PascalNameFilter; Object obj = ...; String jsonStr = JSON.toJSONString(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); }