**FastJson 保留 NULL值问题处理
1.转换工具类
package com.rk.eai.basic.component;
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.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
/**
* 使用alibaba JSON 作为http restful 数据对象
*
* @author wdy
* @since 2021年7月2日 下午3:24:35
*/
public class AlibabaJsonHttpMessageConverters {
@Bean
public HttpMessageConverters messageConverters() {
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
List<MediaType> supportedMediaTypes = new ArrayList<>();
supportedMediaTypes.add(new MediaType("application","json",Charset.forName("UTF-8")));
supportedMediaTypes.add(new MediaType("text","html",Charset.forName("UTF-8")));
fastConverter.setSupportedMediaTypes(supportedMediaTypes);
FastJsonConfig fastJsonConfig = new FastJsonConfig();
//Long类型转String类型,解决雪花算法ID精度丢失问题
SerializeConfig serializeConfig = SerializeConfig.globalInstance;
// ToStringSerializer 是这个包 com.alibaba.fastjson.serializer.ToStringSerializer
serializeConfig.put(Long.class, ToStringSerializer.instance);
serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
fastJsonConfig.setSerializeConfig(serializeConfig);
//JSON在引用同一个对象的时候出现$ref,Gson无法解析
fastJsonConfig.setSerializerFeatures(
SerializerFeature.DisableCircularReferenceDetect,
// 空集合返回[],不返回null
SerializerFeature.WriteNullListAsEmpty,
// 空字符串返回"",不返回null
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteMapNullValue,
SerializerFeature.SkipTransientField);
fastConverter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter = fastConverter;
HttpMessageConverters converters = new HttpMessageConverters(converter);
return converters;
}
}
2.如果是sringboot项目,直接在启动类Application中引入,列如:
@SpringBootApplication
@EnableDiscoveryClient
@Import({CommonImport.class, AlibabaJsonHttpMessageConverters.class,})
@EnableFeignClients(basePackageClasses = {EventReportFeignService.class})
@MapperScan(basePackages = "com.rk.eai.basic.mapper")
public class BasicApplication {
public static void main(String[] args) {
SpringApplication.run(BasicApplication.class, args);
}
}
``