精华内容
下载资源
问答
  • FastJSON自定义序列化

    千次阅读 2019-05-20 19:04:55
    SerializeFilter是通过编程扩展的方式定制序列化。 PropertyPreFilter 根据PropertyName判断是否序列化 PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化 NameFilter 修改Key,如果需要修改Key,...

    SerializeFilter是通过编程扩展的方式定制序列化。

    PropertyPreFilter 根据PropertyName判断是否序列化 
    PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化 
    NameFilter 修改Key,如果需要修改Key,process返回值则可 
    ValueFilter 修改Value 
    BeforeFilter 序列化时在最前添加内容 
    AfterFilter 序列化时在最后添加内容

    例如  修改序列化之后的key值

     @Test
        public void test3() {
            NameFilter valueFilter = new NameFilter() {
    
                @Override
                public String process(Object object, String name, Object value) {
                    if (name.equals("countryname")) {
                        return "countryname1";
                    }
                    if (name.equals("id")) {
                        return "id1";
                    }
                    return name;
                }
            };
            CountryAddDto countryAddDto = new CountryAddDto();
            countryAddDto.setCountryname("北京");
            System.out.println(JSON.toJSONString(countryAddDto, valueFilter));
        }

     

    展开全文
  • 注意:本文以序列化枚举转换为例 一、引入fastjson依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version&...

    注意:本文以序列化枚举转换为例

    一、引入fastjson依赖

    <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.58</version>
            </dependency>

    二、配置fastjson替代jackson

    package com.cdn.one.config;
    
    import com.alibaba.fastjson.serializer.SerializerFeature;
    import com.alibaba.fastjson.support.config.FastJsonConfig;
    import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
    import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.MediaType;
    import org.springframework.http.converter.HttpMessageConverter;
    
    import java.nio.charset.StandardCharsets;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
    
    展开全文
  • fastjson自定义序列化

    2019-03-29 11:53:43
    SerializeFilter简介[SerializeFilter](https://github.com/alibaba/fastjson/wiki/SerializeFilter)PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化PropertyPreFilter 根据PropertyName判断是否...

    简介

    SerializeFilter官方介绍
    fastjson源码git
    SerializeFilter是通过编程扩展的方式定制序列化。fastjson支持6种SerializeFilter,用于不同场景的定制序列化。注意 当存在多个时,存在执行顺序 下面的序号也就是执行顺序

    1. PropertyPreFilter 根据PropertyName判断是否序列化
    2. PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
    3. NameFilter 修改Key,如果需要修改Key,process返回值则可
    4. ValueFilter 修改Value
    5. BeforeFilter 序列化时在最前添加内容
    6. AfterFilter 序列化时在最后添加内容
      这里注意上面的序列化规则并不是所有的都会执行。比如5和6条,只有传入的是javabean是才会执行
     JSONObject.toJSONString(beanObject, filter);
    

    具体查看beanObject传入的对象类型是什么。不用的类型执行逻辑是不一样的
    具体逻辑和那些类型会执行那些方法可以,有兴趣的可以去研究。大部分都是有类型匹配去处理的。下面列出我知道几个

    1. map类型 由MapSerializer执行
    2. javabean 由JavaBeanSerializer执行

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

    fastjson内置一个PascalNameFilter,用于输出将首字符大写的Pascal风格。

    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);
      }
    
    展开全文
  • 一:fastjson自定义序列化 定义一个class---->实现ObjectSerializer接口------>在自定义的class中可以操作数据的序列化 /** * 用于objectId的序列化 */ public class ObjectIdSerializer implements ...

    一:fastjson的自定义序列化

     定义一个class---->实现ObjectSerializer接口------>在自定义的class中可以操作数据的序列化

    /**
     * 用于objectId的序列化
     */
    public class ObjectIdSerializer implements ObjectSerializer {
    
        @Override
        public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
            SerializeWriter out = serializer.out;
    
            if (object instanceof ObjectId) {
                ObjectId objectId = (ObjectId) object;
                out.writeString(objectId.toString());
                return;
            }
        }
    }

    二:fastjson的自定义反序列化

    定义一个class---->实现ObjectDeserializer接口------>在自定义的class中可以操作数据的反序列化

    public class ObjectIdDeserializer implements ObjectDeserializer{
    
        @Override
        public ObjectId deserialze(DefaultJSONParser parser, Type type, Object fieldname){
    
            String idString = parser.getLexer().stringVal();
            return new ObjectId(idString);
        }
    
    
        @Override
        public int getFastMatchToken(){return 0;}
    }

     

    展开全文
  • 本文介绍下fastjson自定义序列化的各种操作。 一、什么是fastjson? fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到...
  • /** * main 测试 * @param args */ public static void main(String[] args)throws Exception { Date date = new Date(); ObjectMapper objectMapper = new ObjectMapper(); ...
  • FastJson自定义全局序列化方式与源码解析 文章目录FastJson自定义全局序列化方式与源码解析前言一、fastjson是什么?二、开搞2.读入数据总结 前言 在进行序列化时,我们会遇到Long型序列化到前端出现精度丢失的...
  • // 在要进行反序列化的属性上加上Fastjson的注解,指定该注解的反序列化自定义的类 @JSONField ( deserializeUsing = BooleanDeserializer . class ) private Boolean remembered ; FastJson的使用文档 ...
  • 1.1、使用自定义FastJSON序列化你的对象 注意如果不配置白名单地址将会出现com.alibaba.fastjson.JSONException: autoType is not support具体可以看看我的转载文章...
  • import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.ObjectSerializer; import java.io.IOException; import java.lang.reflect.Type; import java.text....
  • 项目中突然需要增加另一个字段的查找,而这个查找需要查另一张表的记录。...通过fastjson序列化时,增加该字段的序列化类,该序列化类通过CODE查找名称,并序列化到前端。 VO的功能修改 @Data public class SysD...
  • 自定义fastjson序列化

    千次阅读 2019-07-09 13:31:42
    fastjson自定义序列化实现类,demo对一个字符串进行日期格式化(可兼容多重格式)、String转Double和String转Integer。 1.自定义fastjson字符串日期格式化 自定义类DateCompatibilityFormat,继承ObjectDeserializer,...
  • FastJSON自定义序列化-修改属性值

    万次阅读 2016-02-24 18:52:33
    fastjson支持6种SerializeFilter,用于不同场景的定制序列化。PropertyPreFilter 根据PropertyName判断是否序列化 PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化 NameFilter 修改Key,如果需要...
  • fastjsonserializeFilter自定义序列化
  • 最近的项目中碰到了js精度丢失的问题,项目中一个Long型的数值传递到前台后出现了精度丢失,数据不对了,检查发现是js的...解决方案:json序列化时将Long转成string再传递到前台,重写configureMessageConverters...
  • fastjson自定义枚举反序列化

    千次阅读 2018-10-28 12:33:00
    但是如果需要通过自定义的值反序列化成枚举,就需要自定义序列化器。 如下面枚举,我想通过EnumValue接口返回的value值进行反序列化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 in...
  • 1 JsonFIeld注解实现 自带序列化类属性 2 实现 fastjson的 Filter
  • FastJson自定义Date类型反序列化

    千次阅读 2017-10-12 13:42:04
    需求有时候我们需要自定义序列化,例如从服务器接收的字符串为秒,而fastjson需要的是毫秒。因此需要自定义序列化。问题提出网上很多资料过于陈旧。
  • FastJson序列化

    2014-06-17 16:16:28
    [{"listA":[{"id":"fds","name":"张三"},{"id":"fds","name":"李四"}],"test":"432"}, {"listA":[{"id":"fds","name":"张三"},{"id":"fds","name":"李四"}],...数组里面封装数组的反序列化方法,通过两个bean,进行封装
  • 项目在针对实体进行序列化为JSON或者JSON反序列化时,存在自定义字段解析的需求,最常见的场景为时间属性(标准格式或非标准格式)的序列及反序列化.下文针对该情况,说明如何实现自定时间反序列化解析. 操作步骤 1....
  • fastjson自定义序列化、反序列化
  • FastJson自定义复杂对象序列化

    千次阅读 2018-02-08 14:57:10
    fastjson支持6种SerializeFilter,用于不同场景的定制序列化。 PropertyPreFilter 根据PropertyName判断是否序列化 PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化 NameFilter 修改Key,如果...
  • 对要反序列化的类使用注解@JSONType,deserializer 属性表示自定义的反序列化对象 @JSONType(deserializer = BusinessDataDeserializer.class) public class BusinessData { private String id; private Stirng ...
  • fastJson是阿里巴巴旗下的一个开源项目之一,顾名思义它专门用来做快速操作Json的序列化与反序列化的组件。它是目前json解析最快的开源组件没有之一!在这之前jaskJson是命名为快速操作json的工具,而当阿里巴巴的...
  • 1.添加fastjson依赖 &lt;dependency&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&gt;fastjson&lt;/artifactId&gt; &lt;version&gt;...
  • 在很多时候,默认的序列化是不满足我们的要求的,比如:将字段全部序列化成大写等等,这时候就需要我们定制符合自己要求的序列化fastjson支持多种方式定制序列化。 一、使用@JSONField配置 可以把@JSONField配置...
  • fastjson 序列化序列化配置。 自定义转换 1 类转 JSON, 继承 EnumSerializer等 fastjson 已经的或者 实现 ObjectSerializer 接口 config.getSerializeConfig().put(Double.class, new ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,614
精华内容 2,245
关键字:

fastjson自定义序列化器