package com.xjs.config; import com.alibaba.fastjson.serializer.PropertyFilter; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.ValueFilter; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.fasterxml.jackson.databind.SerializationFeature; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 全局序列化处理配置 * @author xiejs * @since 2021-12-26 */ @Configuration public class JsonConfig { @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); List list = new ArrayList<>(); list.add(SerializerFeature.PrettyFormat); list.add(SerializerFeature.WriteMapNullValue); list.add(SerializerFeature.WriteNullStringAsEmpty); list.add(SerializerFeature.WriteNullListAsEmpty); list.add(SerializerFeature.QuoteFieldNames); list.add(SerializerFeature.WriteDateUseDateFormat); list.add(SerializerFeature.DisableCircularReferenceDetect); list.add(SerializerFeature.WriteBigDecimalAsPlain); //返回枚举类型为枚举toString mp通用枚举用到 list.add(SerializerFeature.WriteEnumUsingToString); fastJsonConfig.setSerializerFeatures(list.toArray(new SerializerFeature[list.size()])); //解决远程调用 ---(Content-Type cannot contain wildcard type '*')报错 fastConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON_UTF8)); //解决mp雪花算法前端精度丢失 ValueFilter valueFilter = new ValueFilter() { @Override public Object process(Object object, String name, Object value) { if ((StringUtils.endsWith(name, "Id") || StringUtils.equals(name, "id")) && value != null && value.getClass() == Long.class) { return String.valueOf(value); } return value; } }; //忽略某些空值 PropertyFilter filter = (source, key, value) -> { if (value == null) { return false; } if(value instanceof List && ((List) value).size() == 0){ return false; } return true; }; fastJsonConfig.setSerializeFilters(valueFilter,filter); fastConverter.setFastJsonConfig(fastJsonConfig); return new HttpMessageConverters(fastConverter); } @Bean public Jackson2ObjectMapperBuilderCustomizer customizer(){ return builder -> builder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); } }