Fastjson中SerializeFilter功能简介说明

书欣 fastjson 发布时间:2022-07-24 23:11:51 阅读数:8864 1
下文笔者讲述fastjson中SerializeFilter功能简介说明,如下所示

SerializeFilter功能简介

SerializeFilter是通过编程扩展的方式定制序列化
   fastjson支持6种SerializeFilter,用于不同场景的定制序列化,如下所示:
   PropertyPreFilter:使用PropertyName判断是否序列化
   PropertyFilter:使用PropertyName和PropertyValue来判断是否序列化
   NameFilter:修改Key,如果需要修改Key,process返回值则可
   ValueFilter:修改Value
   BeforeFilter:序列化时在最前添加内容
   AfterFilter:序列化时在最后添加内容

PropertyPreFilter使用PropertyName判断是否序列化

PropertyFilter不同只使用object和name进行判断,在调用getter之前,这样避免了getter调用可能存在的异常。

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

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

NameFilter 序列化时修改Key

当需要修改Key,process返回值则可
public interface NameFilter extends SerializeFilter {
    String process(Object object, String propertyName, Object propertyValue);
}

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);
  }
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/fastjson/2022/4046.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者