image.png今天在spring boot下用spring data jpa配置好映射关系后发现查询没问题,但是转json返回给浏览器就会报栈溢出。
这是因为对象中的循环引用引起不断递归
我选择了切换json转换器为fastjson,fastjson默认支持消除对同一对象循环引用
但是切换后会出现中文乱码,下面附上fastjson配置方法与乱码解决方法。
@Configuration
public class FastJsonConfiguration extends WebMvcConfigurerAdapter {
/**
* 修改自定义消息转换器
*
* @param converters 消息转换器列表
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
System.out.println("fastjson配置读取");
//调用父类的配置
super.configureMessageConverters(converters);
//创建fastJson消息转换器
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
//创建配置类
FastJsonConfig fastJsonConfig = new FastJsonConfig();
//修改配置返回内容的过滤
fastJsonConfig.setSerializerFeatures(
// SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty
);
fastConverter.setFastJsonConfig(fastJsonConfig);
//处理中文乱码问题
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
fastConverter.setSupportedMediaTypes(fastMediaTypes);
converters.add(fastConverter);
//将fastjson添加到视图消息转换器列表内
converters.add(fastConverter);
}
}
- WriteNullListAsEmpty :List字段如果为null,输出为[],而非null
- WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null
- DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
- WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
- WriteMapNullValue:是否输出值为null的字段,默认为false。
网友评论