Fastjson API SerializeFilter

2022-05-06 15:33 更新

Fastjson API SerializeFilter簡(jiǎn)介

SerializeFilter是通過編程擴(kuò)展的方式定制序列化。fastjson支持6種SerializeFilter,用于不同場(chǎng)景的定制序列化。

  1. PropertyPreFilter 根據(jù)PropertyName判斷是否序列化
  2. PropertyFilter 根據(jù)PropertyName和PropertyValue來判斷是否序列化
  3. NameFilter 修改Key,如果需要修改Key,process返回值則可
  4. ValueFilter 修改Value
  5. BeforeFilter 序列化時(shí)在最前添加內(nèi)容
  6. AfterFilter 序列化時(shí)在最后添加內(nèi)容

PropertyFilter 根據(jù)PropertyName和PropertyValue來判斷是否序列化

  public interface PropertyFilter extends SerializeFilter {
      boolean apply(Object object, String propertyName, Object propertyValue);
  }

可以通過擴(kuò)展實(shí)現(xiàn)根據(jù)object或者屬性名稱或者屬性值進(jìn)行判斷是否需要序列化。例如:

    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); // 序列化的時(shí)候傳入filter

PropertyPreFilter 根據(jù)PropertyName判斷是否序列化

和PropertyFilter不同只根據(jù)object和name進(jìn)行判斷,在調(diào)用getter之前,這樣避免了getter調(diào)用可能存在的異常。

 public interface PropertyPreFilter extends SerializeFilter {
      boolean apply(JSONSerializer serializer, Object object, String name);
  }

NameFilter 序列化時(shí)修改Key

如果需要修改Key,process返回值則可

public interface NameFilter extends SerializeFilter {
    String process(Object object, String propertyName, Object propertyValue);
}

fastjson內(nèi)置一個(gè)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 序列化時(shí)在最前添加內(nèi)容

在序列化對(duì)象的所有屬性之前執(zhí)行某些操作,例如調(diào)用 writeKeyValue 添加內(nèi)容

  public abstract class BeforeFilter implements SerializeFilter {
      protected final void writeKeyValue(String key, Object value) { ... }
      // 需要實(shí)現(xiàn)的抽象方法,在實(shí)現(xiàn)中調(diào)用writeKeyValue添加內(nèi)容
      public abstract void writeBefore(Object object);
  }

AfterFilter 序列化時(shí)在最后添加內(nèi)容

在序列化對(duì)象的所有屬性之后執(zhí)行某些操作,例如調(diào)用 writeKeyValue 添加內(nèi)容

  public abstract class AfterFilter implements SerializeFilter {
      protected final void writeKeyValue(String key, Object value) { ... }
      // 需要實(shí)現(xiàn)的抽象方法,在實(shí)現(xiàn)中調(diào)用writeKeyValue添加內(nèi)容
      public abstract void writeAfter(Object object);
  }


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)