zoukankan      html  css  js  c++  java
  • (四)SpringBoot如何定义消息转换器

    一:添加fastjson依赖

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

      

    三:创建配置文件

    在文件夹configurer中创建WebConfigurer

    package com.example.demo.core.configurer;
    
    import com.alibaba.fastjson.serializer.SerializerFeature;
    import com.alibaba.fastjson.support.config.FastJsonConfig;
    import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.MediaType;
    import org.springframework.http.converter.HttpMessageConverter;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    
    import java.nio.charset.Charset;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author 
     * @Description:
     * @time 2018/4/19 10:42
     */
    @Configuration
    public class WebConfigurer extends WebMvcConfigurationSupport {
    
        /**
         * 修改自定义消息转换器
         * @param converters
         */
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            FastJsonHttpMessageConverter4 converter = new FastJsonHttpMessageConverter4();
            converter.setSupportedMediaTypes(getSupportedMediaTypes());
            FastJsonConfig config = new FastJsonConfig();
            config.setSerializerFeatures(
                // String null -> ""
                SerializerFeature.WriteNullStringAsEmpty,
                // Number null -> 0
                SerializerFeature.WriteNullNumberAsZero,
                //禁止循环引用
                SerializerFeature.DisableCircularReferenceDetect
            );
            converter.setFastJsonConfig(config);
            converter.setDefaultCharset(Charset.forName("UTF-8"));
            converters.add(converter);
        }
    
        private List<MediaType> getSupportedMediaTypes() {
            List<MediaType> supportedMediaTypes = new ArrayList<>();
            supportedMediaTypes.add(MediaType.APPLICATION_JSON);
            supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
            supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
            supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
            supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
            supportedMediaTypes.add(MediaType.APPLICATION_PDF);
            supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
            supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
            supportedMediaTypes.add(MediaType.APPLICATION_XML);
            supportedMediaTypes.add(MediaType.IMAGE_GIF);
            supportedMediaTypes.add(MediaType.IMAGE_JPEG);
            supportedMediaTypes.add(MediaType.IMAGE_PNG);
            supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
            supportedMediaTypes.add(MediaType.TEXT_HTML);
            supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
            supportedMediaTypes.add(MediaType.TEXT_PLAIN);
            supportedMediaTypes.add(MediaType.TEXT_XML);
            return supportedMediaTypes;
        }
    }
    

      其中config.setSerializerFeatures()方法中可以添加多个配置,以下列举出几个常用配置

      WriteNullListAsEmpty :List字段如果为null,输出为[],而非null
      WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null
      DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
      WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
      WriteMapNullValue:是否输出值为null的字段,默认为false

    五:测试

    {
        "code": 200,
        "data": {
            "id": 2,
            "userName": ""   //这里已经变为"",而不是null
        },
        "msg": "success"
    }
    

      

      

  • 相关阅读:
    SCUT
    SCUT
    SCUT
    ???
    Codeforces
    SCUT
    SCUT
    SCUT
    SCUT
    2019牛客暑期多校训练营(第八场)
  • 原文地址:https://www.cnblogs.com/yui66/p/9615746.html
Copyright © 2011-2022 走看看