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 직렬화 시 마지막에 내용 추가

PropertyFilter는 PropertyName과 PropertyValue를 기준으로 직렬화 여부를 결정합니다

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

Yes 구현을 확장하면 객체나 속성 이름 또는 속성 값을 기반으로 직렬화가 필요한지 여부를 결정할 수 있습니다. 예:

  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 전용 기반과 다릅니다. 객체 및 이름에 대해 getter를 호출하기 전에 판단하여 getter 호출에서 가능한 예외를 피하십시오.

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

NameFilter 직렬화 중에 키 수정

키를 수정해야 하는 경우 프로세스가 반환됩니다. 가치는 # 🎜🎜#

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

fastjson에는 첫 번째 문자를 대문자로 하여 파스칼 스타일을 출력하는 데 사용되는 PascalNameFilter가 내장되어 있습니다. 예:

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