fastjson將對象轉爲json字符串給前端的時候, 如果字段的值爲null, 則該字段默認被fastJson過濾直接不展示. 而在實際項目中我們往往也是需要展示這個字段的 , 解決即增加一個fastJson序列化配置 , 設置序列化格式.
package com.xbz.mvc.config;
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 java.util.ArrayList;
import java.util.List;
/**
* @title fastjson前端響應處理
* @description 需要正常返回null值的字段
* @author Xingbz
* @createDate 2019-10-15
*/
@Configuration
public class FastJsonMvcConfig {
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
//1.定義一個convert消息轉換對象
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//2.添加fastJson的序列化配置信息
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullListAsEmpty);
//3.處理中文亂碼問題
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//4.在convert中添加配置信息
fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
return new HttpMessageConverters(fastJsonHttpMessageConverter);
}
}
fastJson序列化格式(SerializerFeature屬性)配置如下 :
名稱 | 說明 | 缺省值 |
---|---|---|
QuoteFieldNames | 輸出key時是否使用雙引號 | true |
UseSingleQuotes | 使用單引號而非雙引號 | false |
WriteMapNullValue | 是否輸入值爲null的key字段 | false |
WriteEnumUsingToString | Enum輸出name()或original | false |
UseISO8601DateFormat | Date使用ISO8601格式輸出 | false |
WriteNullListAsEmpty | list字段如果爲null,則輸出[] | false |
WriteNullStringAsEmpty | 字符串字段如果爲null,則輸出"" | false |
WriteNullNumberAsZero | 數值字段如果爲null,則輸出0 | false |
WriteNullBooleanAsFalse | 布爾字段如果爲null,則輸出false | false |
SkipTransientField | 對象中的屬性是transient修飾的,序列化時將會被忽略 | true |
SortField | 按字段名稱排序後輸出 | false |
WriteTabAsSpecial | 將\t製表符做轉義輸出(不推薦使用) | false |
PrettyFormat | 輸出內容是否格式化 | false |
WriteClassName | 序列化時寫入類型信息. 反序列化時會用到 | false |
DisableCircularReferenceDetect | 消除對同一對象循環引用的問題 | false |
WriteSlashAsSpecial | 對/斜槓進行轉義 | false |
BrowserCompatible | 將中文漢字都轉爲\uXXXX格式, 字節數會多一些,但兼容IE6 | false |
WriteDateUseDateFormat | 全局日期格式修改. JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat); | false |
DisableCheckSpecialChar | 字符串value中如果有特殊字符如雙引號,將會在轉成json時帶有反斜槓轉移符 | false |
NotWriteRootClassName | ||
BeanToArray | 將對象轉爲數組輸出 | false |
WriteNonStringKeyAsString | ||
NotWriteDefaultValue | ||
BrowserSecure | ||
IgnoreNonFieldGetter | 忽略沒有get方法的字段 | false |
WriteEnumUsingName |
更多更詳細說明可參見此博文 https://blog.csdn.net/u010246789/article/details/52539576