《Spring Cloud实战演练》试读:2.6 更改默认的JSON转换器
Spring Boot默认使用Jackson引擎去解析控制器返回的对象,该引擎在性能和便捷性上与第三方引擎(FastJson和Gson等)还有一定的差距,本节将介绍如何将默认转换器替换为FastJson转换器。
(1) 在pom.xml中添加对FastJson的依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
(2) 修改WebConfig类,为其添加方法并设置FastJson转换器:
@SpringBootConfiguration
public class WebConfig extends WebMvcConfigurationSupport{
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
FastJsonHttpMessageConverter fastConverter=new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig=new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.PrettyFormat
);
List<MediaType> mediaTypeList = new ArrayList<>();
//设置编码为UTF-8
mediaTypeList.add(MediaType.APPLICATION_JSON_UTF8);
fastConverter.setSupportedMediaTypes(mediaTypeList);
fastConverter.setFastJsonConfig(fastJsonConfig);
converters.add(fastConverter);
}
}
首先应继承WebMvcConfigurationSupport类,该类提供了Spring Boot对Spring MVC的支持。然后重写configureMessageConverters方法,该方法配置了消息转换器。如果第三方框架希望处理Spring MVC中的请求和响应时,那么需要实现HttpMessageConverter接口。而在上述代码中,FastJsonHttpMessageConverter便是如此,它实现了HttpMessageConverter接口,并通过FastJsonConfig设置FastJson的处理参数,如通过MediaType设置编码为UTF-8,最后添加到HttpMessageConverter中。
这样Spring MVC在处理响应时就可以将JSON解析引擎替换为FastJson。
说明:前面提到,如果控制器返回的是String类型的值,则需要显式设置编码。我们替换成FastJson后,由于已经设置了编码,所以无论是字符串还是对象,都无须设置编码方式,读者可以试一试。