Manual tutorial FastJson
/ Fastjson API SerializeFilter
Fastjson API SerializeFilter
Fastjson API SerializeFilter簡介
SerializeFilter是通過編程擴展的方式定制序列化。fastjson支持6種SerializeFilter,用于不同場景的定制序列化。
- PropertyPreFilter 根據(jù)PropertyName判斷是否序列化
- PropertyFilter 根據(jù)PropertyName和PropertyValue來判斷是否序列化
- NameFilter 修改Key,如果需要修改Key,process返回值則可
- ValueFilter 修改Value
- BeforeFilter 序列化時在最前添加內(nèi)容
- AfterFilter 序列化時在最后添加內(nèi)容
PropertyFilter 根據(jù)PropertyName和PropertyValue來判斷是否序列化
public interface PropertyFilter extends SerializeFilter { boolean apply(Object object, String propertyName, Object propertyValue); }
可以通過擴展實現(xiàn)根據(jù)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 根據(jù)PropertyName判斷是否序列化
和PropertyFilter不同只根據(jù)object和name進行判斷,在調(diào)用getter之前,這樣避免了getter調(diào)用可能存在的異常。
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內(nèi)置一個PascalNameFilter,用于輸出將首字符大寫的Pascal風(fēng)格。 例如:
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 序列化時在最前添加內(nèi)容
在序列化對象的所有屬性之前執(zhí)行某些操作,例如調(diào)用 writeKeyValue 添加內(nèi)容
public abstract class BeforeFilter implements SerializeFilter { protected final void writeKeyValue(String key, Object value) { ... } // 需要實現(xiàn)的抽象方法,在實現(xiàn)中調(diào)用writeKeyValue添加內(nèi)容 public abstract void writeBefore(Object object); }
AfterFilter 序列化時在最后添加內(nèi)容
在序列化對象的所有屬性之后執(zhí)行某些操作,例如調(diào)用 writeKeyValue 添加內(nèi)容
public abstract class AfterFilter implements SerializeFilter { protected final void writeKeyValue(String key, Object value) { ... } // 需要實現(xiàn)的抽象方法,在實現(xiàn)中調(diào)用writeKeyValue添加內(nèi)容 public abstract void writeAfter(Object object); }