Fastjson API の SerializeFilter


Fastjson API SerializeFilter の概要

SerializeFilter は、プログラムによる拡張機能を通じてシリアル化をカスタマイズします。 fastjson は、さまざまなシナリオでカスタマイズされたシリアル化のために 6 種類の SerializeFilter をサポートしています。

  1. PropertyPreFilter は、PropertyName に基づいてシリアル化するかどうかを決定します。
  2. PropertyFilter は、PropertyName および PropertyValue に基づいてシリアル化するかどうかを決定します。
  3. NameFilter キーを変更します。キー、プロセスは値を返します。その後、次のことができます。
  4. ValueFilter 値を変更します。
  5. BeforeFilter シリアル化中に先頭にコンテンツを追加します。
  6. AfterFilter シリアル化中に最後にコンテンツを追加します。

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

これを拡張して、オブジェクトに基づいてシリアル化が必要かどうかを決定することができます。属性名または属性値。例:

  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

は PropertyFilter とは異なり、オブジェクトと名前に基づいてのみ決定します。 getter の呼び出し。これにより、getter 呼び出しで発生する可能性のある例外が回避されます。

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

キーを変更する必要がある場合、戻り値を処理することができます

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);
  }

オブジェクトのすべてのプロパティをシリアル化する前に、writeKeyValue を呼び出してコンテンツを追加するなど、特定の操作を実行します。

   public abstract class BeforeFilter implements SerializeFilter {
      protected final void writeKeyValue(String key, Object value) { ... }
      // 需要实现的抽象方法,在实现中调用writeKeyValue添加内容
      public abstract void writeBefore(Object object);
  }

オブジェクトのすべてのプロパティをシリアル化した後に特定の操作を実行します (writeKeyValue を呼び出してコンテンツを追加するなど)

    public abstract class AfterFilter implements SerializeFilter {
      protected final void writeKeyValue(String key, Object value) { ... }
      // 需要实现的抽象方法,在实现中调用writeKeyValue添加内容
      public abstract void writeAfter(Object object);
  }