zoukankan      html  css  js  c++  java
  • [转]FastJSON通过SerializeFilter定制序列化

    原文地址:https://github.com/alibaba/fastjson/wiki/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);
      }
    

    ValueFilter 序列化是修改Value

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

    BeforeFilter 序列化时在最前添加内容

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

    AfterFilter 序列化时在最前添加内容

      public abstract class AfterFilter implements SerializeFilter {
          protected final void writeKeyValue(String key, Object value) { ... }
          // 需要实现的抽象方法,在实现中调用writeKeyValue添加内容
          public abstract void writeAfter(Object object);
      }
    
  • 相关阅读:
    Solr基础知识二(导入数据)
    Solr基础知识一(安装配置)
    企业微信机器人
    Mysql+Keepalived双主热备高可用操作记录
    mysql互为主从(双主)配置
    编译安装msyql
    JS 常用的一些功能性函数 (自用)
    JavaScrip 之 DOM (回顾)
    MySQL的表定义语法
    MySQL的数据库定义语法
  • 原文地址:https://www.cnblogs.com/dirgo/p/5178629.html
Copyright © 2011-2022 走看看