一 例子
package com.test.conf; 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 org.springframework.http.converter.HttpMessageConverter; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; @Configuration public class JsonConfig { /** * @Author anson * @Description 配置消息轉換器 * @Date: 2019-12-8 11:23:33 * @version: 1.0 * new HttpMessageConverters(true, converters); * 一定要設爲true才能替換否則不會替換 * @return 返回一個消息轉換的bean */ @Bean public HttpMessageConverters fastJsonMessageConverters() { List<HttpMessageConverter<?>> converters = new ArrayList<>(); //需要定義一個convert轉換消息的對象; FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); //添加fastJson的配置信息; FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); //不過濾null值 fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue); //全局時間配置 fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); fastJsonConfig.setCharset(Charset.forName("UTF-8")); //處理中文亂碼問題 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); //在convert中添加配置信息. fastConverter.setSupportedMediaTypes(fastMediaTypes); fastConverter.setFastJsonConfig(fastJsonConfig); converters.add(0, fastConverter); return new HttpMessageConverters(converters); } }
二 配置信息
名稱 | 含義 |
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 | 不是String的字段寫爲String |
NotWriteDefaultValue | 不設默認值 |
BrowserSecure | 不知道 |
IgnoreNonFieldGetter | 忽略沒有getter方法的屬性 |
WriteEnumUsingName |
目前版本的fastjson默認對enum對象使用WriteEnumUsingName屬性,因此會將enum值序列化爲其Name。 |