做外贸自己建网站,wordpress与微信支付宝,游戏网站风控怎么做,展厅搭建公司在json对象转换方面#xff0c;springboot默认使用的是MappingJackson2HttpMessageConverter。常规需求#xff0c;在工程中使用阿里的FastJson作为json对象的转换器。
FastJson SerializerFeatures
WriteNullListAsEmpty #xff1a;List字段如果为null,输出为[],而非nu…在json对象转换方面springboot默认使用的是MappingJackson2HttpMessageConverter。常规需求在工程中使用阿里的FastJson作为json对象的转换器。
FastJson SerializerFeatures
WriteNullListAsEmpty List字段如果为null,输出为[],而非null WriteNullStringAsEmpty 字符类型字段如果为null,输出为,而非null DisableCircularReferenceDetect 消除对同一对象循环引用的问题默认为false如果不配置有可能会进入死循环 WriteNullBooleanAsFalseBoolean字段如果为null,输出为false,而非null WriteMapNullValue是否输出值为null的字段,默认为false。
public enum SerializerFeature {QuoteFieldNames,UseSingleQuotes,WriteMapNullValue,WriteEnumUsingToString,WriteEnumUsingName,UseISO8601DateFormat,WriteNullListAsEmpty,WriteNullStringAsEmpty,WriteNullNumberAsZero,WriteNullBooleanAsFalse,SkipTransientField,SortField,/** deprecated */DeprecatedWriteTabAsSpecial,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 {Overridepublic void extendMessageConverters(ListHttpMessageConverter? 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 {Beanpublic HttpMessageConverters fastJsonHttpMessageConverters() {FastJsonHttpMessageConverter fastConverter new FastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig new FastJsonConfig();fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteBigDecimalAsPlain,SerializerFeature.WriteMapNullValue);fastConverter.setFastJsonConfig(fastJsonConfig);ListMediaType supportedMediaTypes new ArrayList();supportedMediaTypes.add(MediaType.APPLICATION_JSON);fastConverter.setSupportedMediaTypes(supportedMediaTypes);return new HttpMessageConverters(fastConverter);}
}com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter2c5708e7 org.springframework.http.converter.ByteArrayHttpMessageConverter4ffa078d org.springframework.http.converter.StringHttpMessageConverter4e26564d org.springframework.http.converter.ResourceHttpMessageConverter42238078 org.springframework.http.converter.ResourceRegionHttpMessageConverter5627b8eb org.springframework.http.converter.xml.SourceHttpMessageConverter49fe0bcd org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter3516b881 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter6be8ce1b org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConvertere3c36d 二、实现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 {Overridepublic void extendMessageConverters(ListHttpMessageConverter? converters) {for (HttpMessageConverter? messageConverter : converters) {System.out.println(messageConverter);}}Overridepublic void configureMessageConverters(ListHttpMessageConverter? converters) {FastJsonHttpMessageConverter fastConverter new FastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig new FastJsonConfig();fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteBigDecimalAsPlain,SerializerFeature.WriteMapNullValue);fastConverter.setFastJsonConfig(fastJsonConfig);ListMediaType supportedMediaTypes new ArrayList();supportedMediaTypes.add(MediaType.APPLICATION_JSON);fastConverter.setSupportedMediaTypes(supportedMediaTypes);converters.add(fastConverter);}
}org.springframework.http.converter.ByteArrayHttpMessageConverter71f29d91 org.springframework.http.converter.StringHttpMessageConverter6785df10 org.springframework.http.converter.StringHttpMessageConverter6143b2b1 org.springframework.http.converter.ResourceHttpMessageConvertera63643e org.springframework.http.converter.ResourceRegionHttpMessageConverter43294e9b org.springframework.http.converter.xml.SourceHttpMessageConverter26d24d7a org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter5a78b52b org.springframework.http.converter.json.MappingJackson2HttpMessageConverter144440f5 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter4bab78ce org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter42ffbab6 com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter7672960e 注意
1、可以两种方式同时使用这样可以达到目的在转换器列表的头尾都会出现FastJsonHttpMessageConverter com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter2c5708e7 org.springframework.http.converter.ByteArrayHttpMessageConverter4ffa078d org.springframework.http.converter.StringHttpMessageConverter4e26564d org.springframework.http.converter.ResourceHttpMessageConverter42238078 org.springframework.http.converter.ResourceRegionHttpMessageConverter5627b8eb org.springframework.http.converter.xml.SourceHttpMessageConverter49fe0bcd org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter3516b881 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter6be8ce1b org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConvertere3c36d com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter397a10df 2、不要乱加 EnableWebMvc标签这个标签会导致添加自定义消息转换器失败。因为时间问题目前还不清楚具体原因
针对方案一启动类或任意配置类加了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 {Overridepublic void extendMessageConverters(ListHttpMessageConverter? 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 {Beanpublic HttpMessageConverters fastJsonHttpMessageConverters() {FastJsonHttpMessageConverter fastConverter new FastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig new FastJsonConfig();fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteBigDecimalAsPlain,SerializerFeature.WriteMapNullValue);fastConverter.setFastJsonConfig(fastJsonConfig);ListMediaType supportedMediaTypes new ArrayList();supportedMediaTypes.add(MediaType.APPLICATION_JSON);fastConverter.setSupportedMediaTypes(supportedMediaTypes);return new HttpMessageConverters(fastConverter);}
}org.springframework.http.converter.ByteArrayHttpMessageConverter42238078 org.springframework.http.converter.StringHttpMessageConverter5627b8eb org.springframework.http.converter.ResourceHttpMessageConverter49fe0bcd org.springframework.http.converter.ResourceRegionHttpMessageConverter3516b881 org.springframework.http.converter.xml.SourceHttpMessageConverter6be8ce1b org.springframework.http.converter.support.AllEncompassingFormHttpMessageConvertere3c36d org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter397a10df org.springframework.http.converter.json.MappingJackson2HttpMessageConverter39a865c1 针对方案二启动类或任意配置类加了EnableWebMvc后导致集合内仅有自定义转换器
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 {Overridepublic void extendMessageConverters(ListHttpMessageConverter? converters) {for (HttpMessageConverter? messageConverter : converters) {System.out.println(messageConverter);}}Overridepublic void configureMessageConverters(ListHttpMessageConverter? converters) {FastJsonHttpMessageConverter fastConverter new FastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig new FastJsonConfig();fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteBigDecimalAsPlain,SerializerFeature.WriteMapNullValue);fastConverter.setFastJsonConfig(fastJsonConfig);ListMediaType supportedMediaTypes new ArrayList();supportedMediaTypes.add(MediaType.APPLICATION_JSON);fastConverter.setSupportedMediaTypes(supportedMediaTypes);converters.add(fastConverter);}
}com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter1df06ecd 启动类代码 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);}}