SpringBoot 統一 NULL轉爲空字符

https://www.jianshu.com/p/485c113de6b6

一、Maven依賴

 

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>${fastjson.version}</version>
</dependency>

二、配置類

 

@Configuration
public class BeanConfig {
    /*注入Bean : HttpMessageConverters,以支持fastjson*/
    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        FastJsonHttpMessageConverter fastConvert = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
                SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.WriteNullNumberAsZero,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.DisableCheckSpecialChar);
        fastJsonConfig.setDateFormat("yyyy-MM-dd hh:mm:ss");
        //處理中文亂碼問題
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConvert.setSupportedMediaTypes(fastMediaTypes);
        fastConvert.setFastJsonConfig(fastJsonConfig);
        return new HttpMessageConverters((HttpMessageConverter<?>) fastConvert);
    }
}
注:此方法會出現字符串雙引號問題。

三、完美解決配置

 

@Configuration
@Slf4j
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/");
    }

    public HttpMessageConverter<String> stringConverter() {
        StringHttpMessageConverter converter = new StringHttpMessageConverter(
                Charset.forName("UTF-8"));
        return converter;
    }

    public HttpMessageConverter fastConverter() {
        //1、定義一個convert轉換消息的對象
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        //2、添加fastjson的配置信息
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
                SerializerFeature.WriteNullStringAsEmpty,   //字符串null返回空字符串
                SerializerFeature.WriteNullNumberAsZero,    //數值類型爲0
                SerializerFeature.WriteNullListAsEmpty,     //空字段保留
                SerializerFeature.WriteMapNullValue);
        fastJsonConfig.setCharset(Charset.forName("UTF-8"));
        //2-1 處理中文亂碼問題
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);
        //3、在convert中添加配置信息
        fastConverter.setFastJsonConfig(fastJsonConfig);
        return fastConverter;
    }

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.clear();
        converters.add(stringConverter());
        converters.add(fastConverter());
    }

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedOrigins("*").allowedMethods("*").allowCredentials(true);
            }
        };
    }
}
注:FastJsonHttpMessageConverter  前面必須有一個StringHttpMessageConverter

四、fastjson SerializerFeature說明

 

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   含義  
NotWriteDefaultValue    含義  
BrowserSecure   含義  
IgnoreNonFieldGetter    含義  
WriteEnumUsingName  含義


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章