SpringBoot添加自定义消息转换器
首先我们需要明白一个概念:springboot中很多配置都是使用了条件注解进行判断一个配置或者引入的类是否在容器中存在,如果存在会如何,如果不存在会如何。
也就是说,有些配置会在springboot中有默认配置,前提是你没有配置,这样来起到简化配置作用。如果你配置了,容器就不会为你再去默认配置。
配置消息转化器的两种方法:
方法一:自定义消息转化器,只需要在@Configuration的类中添加消息转化器的@bean加入到Spring容器,就会被Spring Boot自动加入到容器中。
自定义字符串转换器:
1 //此方法位于一个有@Configuration注解的类中 2 @Bean 3 public StringHttpMessageConverter stringHttpMessageConverter(){ 4 StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8")); 5 return converter; 6 }
自定义fastjson转换器:
1 @Bean 2 public HttpMessageConverters fastJsonHttpMessageConverters(){ 3 //1.需要定义一个convert转换消息的对象; 4 FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); 5 //2:添加fastJson的配置信息; 6 FastJsonConfig fastJsonConfig = new FastJsonConfig(); 7 fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); 8 //3处理中文乱码问题 9 List<MediaType> fastMediaTypes = new ArrayList<>(); 10 fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); 11 //4.在convert中添加配置信息. 12 fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); 13 fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); 14 HttpMessageConverter<?> converter = fastJsonHttpMessageConverter; 15 return new HttpMessageConverters(converter); 16 17 }
方法二:在继承WebMvcConfigurerAdapter的类中重写(覆盖)configureMessageConverters方法
自定义字符串转换器:
1 // 自定义消息转化器的第二种方法 2 @Override 3 public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 4 StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8")); 5 converters.add(converter); 6 }
自定义fastjson转换器:
1 @Override 2 public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 3 super.configureMessageConverters(converters); 4 //1.需要定义一个convert转换消息的对象; 5 FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); 6 //2.添加fastJson的配置信息,比如:是否要格式化返回的json数据; 7 FastJsonConfig fastJsonConfig = new FastJsonConfig(); 8 fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); 9 //3处理中文乱码问题 10 List<MediaType> fastMediaTypes = new ArrayList<>(); 11 fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); 12 //4.在convert中添加配置信息. 13 fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); 14 fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); 15 //5.将convert添加到converters当中. 16 converters.add(fastJsonHttpMessageConverter); 17 }
思考题:
1、如果我将本文中所有提到的代码都写进项目中,那么此时容器中有几个消息转换器?
2、如果不配置文中的消息转换器,容器中有几个消息转换器?
有兴趣的可以留言大家讨论讨论,欢迎大家对本人行文过程中的错误进行指出