Fastjson API 序列化過濾器


Fastjson API SerializeFilter簡介

SerializeFilter是透過程式擴充的方式自訂序列化。 fastjson支援6種SerializeFilter,用於不同場景的客製化序列化。

  1. PropertyPreFilter 根據PropertyName判斷是否序列化
  2. PropertyFilter 根據PropertyName和PropertyValue來判斷是否序列化
  3. NameFilter 修改Key,如果需要修改Key,process回傳值則可
  4. ValueFilter 修改Value
  5. BeforeFilter 序列化時在最前面加入內容
  6. 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);
  }