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 含義