1、fastjson配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>jackson-databind</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.2</version>
</dependency>
1.1 接口返回格式化配置
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ToStringSerializer;
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.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* fastjson配置
* <p>
* 1.先定义一个convert转换消息的对象
* 2.添加fastjson的配置信息,比如:是否要格式化返回的json数据
* 3.在convert中添加配置信息
* 4.将convert添加到converters当中
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//1.先定义一个convert转换消息的对象
FastJsonHttpMessageConverter fasHttpMessageConverter = new FastJsonHttpMessageConverter();
//处理中文乱码问题(不然出现中文乱码)
List<MediaType> fastMediaTypes = new ArrayList<MediaType>();
fastMediaTypes.add(MediaType.APPLICATION_JSON);
fastMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
fastMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
fastMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
fastMediaTypes.add(MediaType.APPLICATION_PDF);
fastMediaTypes.add(MediaType.APPLICATION_RSS_XML);
fastMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
fastMediaTypes.add(MediaType.APPLICATION_XML);
fastMediaTypes.add(MediaType.IMAGE_GIF);
fastMediaTypes.add(MediaType.IMAGE_JPEG);
fastMediaTypes.add(MediaType.IMAGE_PNG);
fastMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
fastMediaTypes.add(MediaType.TEXT_HTML);
fastMediaTypes.add(MediaType.TEXT_MARKDOWN);
fastMediaTypes.add(MediaType.TEXT_XML);
fastMediaTypes.add(new MediaType("application", "vnd.spring-boot.actuator.v2+json"));
fastMediaTypes.add(new MediaType("application", "vnd.spring-boot.actuator.v1+json"));
fastMediaTypes.add(new MediaType("application", "vnd.spring-boot.actuator.v3+json"));
fasHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
//2.添加fastjson的配置信息,比如:是否要格式化返回的json数据
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.PrettyFormat,
// 保留 Map 空的字段
SerializerFeature.WriteMapNullValue,
// 将 String 类型的 null 转成""
SerializerFeature.WriteNullStringAsEmpty,
// 将 Number 类型的 null 转成 0
SerializerFeature.WriteNullNumberAsZero,
// 将 List 类型的 null 转成 []
SerializerFeature.WriteNullListAsEmpty,
// 将 Boolean 类型的 null 转成 false
SerializerFeature.WriteNullBooleanAsFalse,
// 避免循环引用
SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteBigDecimalAsPlain
);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
fastJsonConfig.setCharset(StandardCharsets.UTF_8);
//解决Long转json精度丢失的问题
SerializeConfig serializeConfig = SerializeConfig.globalInstance;
serializeConfig.put(BigDecimal.class, ToStringSerializer.instance);
serializeConfig.put(Double.class, ToStringSerializer.instance);
serializeConfig.put(Integer.class, ToStringSerializer.instance);
serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
serializeConfig.put(Long.class, ToStringSerializer.instance);
serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
fastJsonConfig.setSerializeConfig(serializeConfig);