首先我們需要明白一個概念: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、如果不配置文中的消息轉換器,容器中有幾個消息轉換器?
有興趣的可以留言大家討論討論,歡迎大家對本人行文過程中的錯誤進行指出
