以前使用fastjson替换jackson时,没有直接在页面打印过json,都是js使用没有出现乱码,偶然 打印出来出现了中文乱码
一:之前使用的配置方式,该方式只是使FastJsonHTTPMessageConverter优先级更高,并没有替换Jackson
@Configurationpublic class FastJsonConf { @Bean public HttpMessageConverters fastjsonHttpMessageConverter() { //消息转换对象 FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); //添加fastjson的配置信息,是否格式化返回json FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); //转换器中添加配置信息 fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); HttpMessageConverter converter = fastJsonHttpMessageConverter; return new HttpMessageConverters(converter); }}
二:找到一个博主的文章解决了乱码:http://www.cnblogs.com/xql4j/p/6729524.html
该种方式完全替换了Jackson@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter { /** * 利用fastjson替换掉jackson,且解决中文乱码问题 * @param converters */ @Override public void configureMessageConverters(List> converters) { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); //处理中文乱码问题 List fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); fastConverter.setFastJsonConfig(fastJsonConfig); converters.add(fastConverter); }}
在Springboot 2.0.x以上,使用的是spring5.x版本,该版本移除了WebMvcConfigurerAdapter类,所以上面第二种方式不再使用,如果你的需求是完全替换掉Jackson,应该做新的实现:
常用重写接口:/** 解决跨域问题 **/public void addCorsMappings(CorsRegistry registry) ;/** 添加拦截器 **/void addInterceptors(InterceptorRegistry registry);/** 这里配置视图解析器 **/void configureViewResolvers(ViewResolverRegistry registry);/** 配置内容裁决的一些选项 **/void configureContentNegotiation(ContentNegotiationConfigurer configurer);/** 视图跳转控制器 **/void addViewControllers(ViewControllerRegistry registry);/** 静态资源处理 **/void addResourceHandlers(ResourceHandlerRegistry registry);/** 默认静态资源处理器 **/void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);
方式一:
@Configurationpublic class MyWebMvcConfigurerAdapter implements WebMvcConfigurer { //WebMvcConfigurer接口空实现 /** * 完全覆盖Jackson * @param converters */ @Override public void configureMessageConverters(List> converters) { FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); List mediaTypes = Lists.newArrayList(); mediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastJsonHttpMessageConverter.setSupportedMediaTypes(mediaTypes); fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); HttpMessageConverter converter = fastJsonHttpMessageConverter; converters.add(converter); }}
方式二:
@Configurationclass WebMvcConf extends WebMvcConfigurationSupport { @Override public void configureMessageConverters(List> converters) { FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); List mediaTypes = Lists.newArrayList(); mediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastJsonHttpMessageConverter.setSupportedMediaTypes(mediaTypes); fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); HttpMessageConverter converter = fastJsonHttpMessageConverter; converters.add(converter); }}
推荐使用第二种。