在json对象转换方面,springboot默认使用的是MappingJackson2HttpMessageConverter。常规需求,在工程中使用阿里的FastJson作为json对象的转换器。
FastJson SerializerFeatures
WriteNullListAsEmpty :List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null
DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
WriteMapNullValue:是否输出值为null的字段,默认为false。
- public enum SerializerFeature {
- QuoteFieldNames,
- UseSingleQuotes,
- WriteMapNullValue,
- WriteEnumUsingToString,
- WriteEnumUsingName,
- UseISO8601DateFormat,
- WriteNullListAsEmpty,
- WriteNullStringAsEmpty,
- WriteNullNumberAsZero,
- WriteNullBooleanAsFalse,
- SkipTransientField,
- SortField,
- /** @deprecated */
- @Deprecated
- WriteTabAsSpecial,
- PrettyFormat,
- WriteClassName,
- DisableCircularReferenceDetect,
- WriteSlashAsSpecial,
- BrowserCompatible,
- WriteDateUseDateFormat,
- NotWriteRootClassName,
- /** @deprecated */
- DisableCheckSpecialChar,
- BeanToArray,
- WriteNonStringKeyAsString,
- NotWriteDefaultValue,
- BrowserSecure,
- IgnoreNonFieldGetter,
- WriteNonStringValueAsString,
- IgnoreErrorGetter,
- WriteBigDecimalAsPlain,
- MapSortField;
- }
使用FastJson,有两种常规操作。
一、注入bean的方式,这种方法加入的转换器排序是第一位
- package com.gaoshan.verification.config;
-
-
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.converter.HttpMessageConverter;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
- import java.util.List;
-
- @Configuration
- public class WebMvcConfigurerConfig implements WebMvcConfigurer {
-
- @Override
- public void extendMessageConverters(List
> converters) { - for (HttpMessageConverter> messageConverter : converters) {
- System.out.println("======================"+messageConverter);
- }
- }
- }
- package com.gaoshan.verification.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;
-
- @Configuration
- public class MessageConvertConfig {
-
- @Bean
- public HttpMessageConverters fastJsonHttpMessageConverters() {
- FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
- FastJsonConfig fastJsonConfig = new FastJsonConfig();
- fastJsonConfig.setSerializerFeatures(
- SerializerFeature.PrettyFormat,
- SerializerFeature.DisableCircularReferenceDetect,
- SerializerFeature.WriteBigDecimalAsPlain,
- SerializerFeature.WriteMapNullValue);
- fastConverter.setFastJsonConfig(fastJsonConfig);
- List
supportedMediaTypes = new ArrayList<>(); - supportedMediaTypes.add(MediaType.APPLICATION_JSON);
- fastConverter.setSupportedMediaTypes(supportedMediaTypes);
- return new HttpMessageConverters(fastConverter);
- }
- }
======================com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter@2c5708e7
======================org.springframework.http.converter.ByteArrayHttpMessageConverter@4ffa078d
======================org.springframework.http.converter.StringHttpMessageConverter@4e26564d
======================org.springframework.http.converter.ResourceHttpMessageConverter@42238078
======================org.springframework.http.converter.ResourceRegionHttpMessageConverter@5627b8eb
======================org.springframework.http.converter.xml.SourceHttpMessageConverter@49fe0bcd
======================org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@3516b881
======================org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@6be8ce1b
======================org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@e3c36d
二、实现WebMvcConfigurer接口,这种方法加入的转换器排序是最后一位
- package com.gaoshan.verification.config;
-
- import com.alibaba.fastjson.serializer.SerializerFeature;
- import com.alibaba.fastjson.support.config.FastJsonConfig;
- import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.MediaType;
- import org.springframework.http.converter.HttpMessageConverter;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
- import java.util.ArrayList;
- import java.util.List;
-
- @Configuration
- public class WebMvcConfigurerConfig implements WebMvcConfigurer {
-
- @Override
- public void extendMessageConverters(List
> converters) { - for (HttpMessageConverter> messageConverter : converters) {
- System.out.println("======================"+messageConverter);
- }
- }
-
- @Override
- public void configureMessageConverters(List
> converters) { - FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
- FastJsonConfig fastJsonConfig = new FastJsonConfig();
- fastJsonConfig.setSerializerFeatures(
- SerializerFeature.PrettyFormat,
- SerializerFeature.DisableCircularReferenceDetect,
- SerializerFeature.WriteBigDecimalAsPlain,
- SerializerFeature.WriteMapNullValue);
- fastConverter.setFastJsonConfig(fastJsonConfig);
- List
supportedMediaTypes = new ArrayList<>(); - supportedMediaTypes.add(MediaType.APPLICATION_JSON);
- fastConverter.setSupportedMediaTypes(supportedMediaTypes);
- converters.add(fastConverter);
- }
- }
======================org.springframework.http.converter.ByteArrayHttpMessageConverter@71f29d91
======================org.springframework.http.converter.StringHttpMessageConverter@6785df10
======================org.springframework.http.converter.StringHttpMessageConverter@6143b2b1
======================org.springframework.http.converter.ResourceHttpMessageConverter@a63643e
======================org.springframework.http.converter.ResourceRegionHttpMessageConverter@43294e9b
======================org.springframework.http.converter.xml.SourceHttpMessageConverter@26d24d7a
======================org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@5a78b52b
======================org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@144440f5
======================org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@4bab78ce
======================org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@42ffbab6
======================com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter@7672960e
注意:
1、可以两种方式同时使用,这样可以达到目的,在转换器列表的头尾,都会出现FastJsonHttpMessageConverter
======================com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter@2c5708e7
======================org.springframework.http.converter.ByteArrayHttpMessageConverter@4ffa078d
======================org.springframework.http.converter.StringHttpMessageConverter@4e26564d
======================org.springframework.http.converter.ResourceHttpMessageConverter@42238078
======================org.springframework.http.converter.ResourceRegionHttpMessageConverter@5627b8eb
======================org.springframework.http.converter.xml.SourceHttpMessageConverter@49fe0bcd
======================org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@3516b881
======================org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@6be8ce1b
======================org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@e3c36d
======================com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter@397a10df
2、不要乱加 @EnableWebMvc标签,这个标签会导致添加自定义消息转换器失败。因为时间问题,目前还不清楚具体原因
- package com.gaoshan.verification.config;
-
-
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.converter.HttpMessageConverter;
- import org.springframework.web.servlet.config.annotation.EnableWebMvc;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
- import java.util.List;
-
- @Configuration
- @EnableWebMvc
- public class WebMvcConfigurerConfig implements WebMvcConfigurer {
-
- @Override
- public void extendMessageConverters(List
> converters) { - for (HttpMessageConverter> messageConverter : converters) {
- System.out.println("======================"+messageConverter);
- }
- }
- }
- package com.gaoshan.verification.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;
-
- @Configuration
- public class MessageConvertConfig {
-
- @Bean
- public HttpMessageConverters fastJsonHttpMessageConverters() {
- FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
- FastJsonConfig fastJsonConfig = new FastJsonConfig();
- fastJsonConfig.setSerializerFeatures(
- SerializerFeature.PrettyFormat,
- SerializerFeature.DisableCircularReferenceDetect,
- SerializerFeature.WriteBigDecimalAsPlain,
- SerializerFeature.WriteMapNullValue);
- fastConverter.setFastJsonConfig(fastJsonConfig);
- List
supportedMediaTypes = new ArrayList<>(); - supportedMediaTypes.add(MediaType.APPLICATION_JSON);
- fastConverter.setSupportedMediaTypes(supportedMediaTypes);
- return new HttpMessageConverters(fastConverter);
- }
- }
======================org.springframework.http.converter.ByteArrayHttpMessageConverter@42238078
======================org.springframework.http.converter.StringHttpMessageConverter@5627b8eb
======================org.springframework.http.converter.ResourceHttpMessageConverter@49fe0bcd
======================org.springframework.http.converter.ResourceRegionHttpMessageConverter@3516b881
======================org.springframework.http.converter.xml.SourceHttpMessageConverter@6be8ce1b
======================org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@e3c36d
======================org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@397a10df
======================org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@39a865c1
- package com.gaoshan.verification.config;
-
- import com.alibaba.fastjson.serializer.SerializerFeature;
- import com.alibaba.fastjson.support.config.FastJsonConfig;
- import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.MediaType;
- import org.springframework.http.converter.HttpMessageConverter;
- import org.springframework.web.servlet.config.annotation.EnableWebMvc;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
- import java.util.ArrayList;
- import java.util.List;
-
- @Configuration
- @EnableWebMvc
- public class WebMvcConfigurerConfig implements WebMvcConfigurer {
-
- @Override
- public void extendMessageConverters(List
> converters) { - for (HttpMessageConverter> messageConverter : converters) {
- System.out.println("======================"+messageConverter);
- }
- }
-
- @Override
- public void configureMessageConverters(List
> converters) { - FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
- FastJsonConfig fastJsonConfig = new FastJsonConfig();
- fastJsonConfig.setSerializerFeatures(
- SerializerFeature.PrettyFormat,
- SerializerFeature.DisableCircularReferenceDetect,
- SerializerFeature.WriteBigDecimalAsPlain,
- SerializerFeature.WriteMapNullValue);
- fastConverter.setFastJsonConfig(fastJsonConfig);
- List
supportedMediaTypes = new ArrayList<>(); - supportedMediaTypes.add(MediaType.APPLICATION_JSON);
- fastConverter.setSupportedMediaTypes(supportedMediaTypes);
- converters.add(fastConverter);
- }
- }
======================com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter@1df06ecd
- package com;
-
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
-
- @SpringBootApplication
- public class VerificationApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(VerificationApplication.class, args);
- }
-
- }