• FastJson 配置


    一 例子

    package com.test.conf;
     
    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.Charset;
    import java.util.ArrayList;
    import java.util.List;
     
    @Configuration
    public class JsonConfig {
        /**
         * @Author anson
         * @Description 配置消息转换器
         * @Date: 2019-12-8 11:23:33
         * @version: 1.0
         * new HttpMessageConverters(true, converters);
         * 一定要设为true才能替换否则不会替换
         * @return 返回一个消息转换的bean
         */
        @Bean
        public HttpMessageConverters fastJsonMessageConverters() {
            List<HttpMessageConverter<?>> converters = new ArrayList<>();
            //需要定义一个convert转换消息的对象;
            FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
            //添加fastJson的配置信息;
            FastJsonConfig fastJsonConfig = new FastJsonConfig();
            fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
            //不过滤null值
            fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue);
            //全局时间配置
            fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
            fastJsonConfig.setCharset(Charset.forName("UTF-8"));
            //处理中文乱码问题
            List<MediaType> fastMediaTypes = new ArrayList<>();
            fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
            //在convert中添加配置信息.
            fastConverter.setSupportedMediaTypes(fastMediaTypes);
            fastConverter.setFastJsonConfig(fastJsonConfig);
     
            converters.add(0, fastConverter);
            return new HttpMessageConverters(converters);
        }
    }

    二 配置信息

    名称 含义
    QuoteFieldNames 输出key时是否使用双引号,默认为true    
    UseSingleQuotes 使用单引号而不是双引号,默认为false
    WriteMapNullValue 是否输出值为null的字段,默认为false
    WriteEnumUsingToString Enum输出name()或者original,默认为false     
    UseISO8601DateFormat Date使用ISO8601格式输出,默认为false    
    WriteNullListAsEmpty List字段如果为null,输出为[],而非null     
    WriteNullStringAsEmpty 字符类型字段如果为null,输出为”“,而非null
    WriteNullNumberAsZero 数值字段如果为null,输出为0,而非null     
    WriteNullBooleanAsFalse Boolean字段如果为null,输出为false,而非null     
    SkipTransientField 如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true
    SortField 按字段名称排序后输出。默认为false    
    WriteTabAsSpecial 把\t做转义输出,默认为false
    PrettyFormat 结果是否格式化,默认为false
    WriteClassName 序列化时写入类型信息,默认为false。反序列化是需用到    
    DisableCircularReferenceDetect 消除对同一对象循环引用的问题,默认为false    
    WriteSlashAsSpecial 对斜杠’/’进行转义    
    BrowserCompatible 将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false
    WriteDateUseDateFormat 全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
    DisableCheckSpecialChar 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false    
    NotWriteRootClassName  不知道
    BeanToArray 将对象转为array输出    
    WriteNonStringKeyAsString 不是String的字段写为String    
    NotWriteDefaultValue 不设默认值     
    BrowserSecure  不知道
    IgnoreNonFieldGetter 忽略没有getter方法的属性
    WriteEnumUsingName

    目前版本的fastjson默认对enum对象使用WriteEnumUsingName属性,因此会将enum值序列化为其Name。
    使用WriteEnumUsingToString方法可以序列化时将Enum转换为toString()的返回值;同时override toString函数能够将enum值输出需要的形式。但是这样做会带来一个问题,对应的反序列化使用的Enum的静态方法valueof可能无法识别自行生成的toString(),导致反序列化出错。
    如果将节省enum序列化后的大小,可以将enum序列化其ordinal值,保存为int类型。fastJson在反序列化时,如果值为int,则能够使用ordinal值匹配,找到合适的对象。
    fastjson要将enum序列化为ordinal只需要禁止WriteEnumUsingName feature。
    首先根据默认的features排除WriteEnumUsingName,然后使用新的features序列化即可。




  • 相关阅读:
    染色体共线性可视化
    Hi-C互作热图作图神器-HiCPlotter
    利用ONT测序检测真核生物全基因组甲基化状态
    scRNAseq benchmark 学习笔记
    友情链接
    关于
    TF目标检测API-Error: Argument must be a dense tensor: range(0, 3)
    python字符串使用
    Ubuntu下几个命令
    转::linux应用之gcc环境的安装
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/16531769.html
Copyright © 2020-2023  润新知