• FastJson 配置


    一 例子

    1. package com.test.conf;
    2. import com.alibaba.fastjson.serializer.SerializerFeature;
    3. import com.alibaba.fastjson.support.config.FastJsonConfig;
    4. import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
    5. import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
    6. import org.springframework.context.annotation.Bean;
    7. import org.springframework.context.annotation.Configuration;
    8. import org.springframework.http.MediaType;
    9. import org.springframework.http.converter.HttpMessageConverter;
    10. import java.nio.charset.Charset;
    11. import java.util.ArrayList;
    12. import java.util.List;
    13. @Configuration
    14. public class JsonConfig {
    15. /**
    16. * @Author anson
    17. * @Description 配置消息转换器
    18. * @Date: 2019-12-8 11:23:33
    19. * @version: 1.0
    20. * new HttpMessageConverters(true, converters);
    21. * 一定要设为true才能替换否则不会替换
    22. * @return 返回一个消息转换的bean
    23. */
    24. @Bean
    25. public HttpMessageConverters fastJsonMessageConverters() {
    26. List> converters = new ArrayList<>();
    27. //需要定义一个convert转换消息的对象;
    28. FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
    29. //添加fastJson的配置信息;
    30. FastJsonConfig fastJsonConfig = new FastJsonConfig();
    31. fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
    32. //不过滤null值
    33. fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue);
    34. //全局时间配置
    35. fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
    36. fastJsonConfig.setCharset(Charset.forName("UTF-8"));
    37. //处理中文乱码问题
    38. List fastMediaTypes = new ArrayList<>();
    39. fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
    40. //在convert中添加配置信息.
    41. fastConverter.setSupportedMediaTypes(fastMediaTypes);
    42. fastConverter.setFastJsonConfig(fastJsonConfig);
    43. converters.add(0, fastConverter);
    44. return new HttpMessageConverters(converters);
    45. }
    46. }

    二 配置信息

    名称含义
    QuoteFieldNames输出key时是否使用双引号,默认为true    
    UseSingleQuotes使用单引号而不是双引号,默认为false
    WriteMapNullValue是否输出值为null的字段,默认为false
    WriteEnumUsingToStringEnum输出name()或者original,默认为false     
    UseISO8601DateFormatDate使用ISO8601格式输出,默认为false    
    WriteNullListAsEmptyList字段如果为null,输出为[],而非null     
    WriteNullStringAsEmpty字符类型字段如果为null,输出为”“,而非null
    WriteNullNumberAsZero数值字段如果为null,输出为0,而非null     
    WriteNullBooleanAsFalseBoolean字段如果为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序列化即可。

  • 相关阅读:
    spring spring-boot spring-cloud spring-cloud-alibaba之间版本对应关系
    ELK下载(Elasticsearch、Logstash、Kibana)
    java ssm新鲜果汁厂进销存管理系统
    上周热点回顾(2.21-2.27)
    模拟栈(模板)
    python树状打印项目路径
    IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in Python
    Zabbix之部署代理服务器
    PDF怎么在手机上删除不要的页
    实现printf功能代码效果
  • 原文地址:https://blog.csdn.net/hanjun0612/article/details/126052407