• FastJson


    import cn.hutool.core.util.ReflectUtil;
    import com.alibaba.fastjson.serializer.*;
    import com.alibaba.fastjson.support.config.FastJsonConfig;
    import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
    import com.qh.common.mycommon.response.ApiResult;
    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 java.math.BigDecimal;
    import java.nio.charset.StandardCharsets;
    import java.util.ArrayList;
    import java.util.List;

    /**
     * FastJson配置
     *
     * @author Gangbb
     * @date 2022/1/1
     **/
    @Configuration
    public class FastJsonConfiguration {

        @Bean
        public HttpMessageConverters getFastJSONHttpMessageConvert() {
            // 定义一个转换消息的对象
            FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
            // 添加fastjson的配置信息 比如 :是否要格式化返回的json数据
            FastJsonConfig fastJsonConfig = new FastJsonConfig();

            // 修改配置返回内容的过滤
            fastJsonConfig.setSerializerFeatures(
                    // 格式化输出
                    SerializerFeature.PrettyFormat,
                    // 消除循环引用
                    SerializerFeature.DisableCircularReferenceDetect,
                    // 返回结果保留null值
                    SerializerFeature.WriteMapNullValue,
                    // 将返回值为null的字符串转变成"",在这里可以自己设置
                    SerializerFeature.WriteNullStringAsEmpty,
                    // List字段如果为null,输出为[],而非null
                    SerializerFeature.WriteNullListAsEmpty
            );

            // 解决 SerializerFeature.WriteNullStringAsEmpty 不生效问题
            ValueFilter valueFilter = (object, name, value) -> {
                if (null == value){
                    value = "";
                }
                return value;
            };

            // 设置全局日期格式
            fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");

            // 注入过滤器
            fastJsonConfig.setSerializeFilters(valueFilter);

            // Long、BigDecimal 序列化时转 String
            SerializeConfig serializeConfig = SerializeConfig.globalInstance;
            serializeConfig.put(Long.class, ToStringSerializer.instance);
            serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
            serializeConfig.put(BigDecimal.class, ToStringSerializer.instance);
            // 在转换器中添加配置信息
            fastJsonConfig.setSerializeConfig(serializeConfig);
            fastConverter.setDefaultCharset(StandardCharsets.UTF_8);
            fastConverter.setFastJsonConfig(fastJsonConfig);

            // 解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json"
            List mediaTypeList = new ArrayList<>();
            mediaTypeList.add(MediaType.APPLICATION_JSON);
            fastConverter.setSupportedMediaTypes(mediaTypeList);

            return new HttpMessageConverters(fastConverter);
        }
    }
    ————————————————
    版权声明:本文为CSDN博主「Gangbb」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_37132495/article/details/122283625

  • 相关阅读:
    机器视觉软件破解的背后是道高一尺,魔高一丈
    开源免费的对象存储Minio
    如何设计 API?
    nginx配置域名不需要项目名称
    【43. 字符串相乘】
    【深度学习笔记】计算机视觉——单发多框检测(SSD)
    cmd(命令行)操作或连接mysql数据库,以及创建数据库与表
    centos7下centos-home磁盘空间转移到centos-root下
    Hadoop笔记06-Hadoop-源码解析
    Prometheus 警报管理实现
  • 原文地址:https://blog.csdn.net/phone13144830339/article/details/126847987