springboot2.0 controller中文问号或者乱码的解决办法
开发过程中中文一直是???显示,根据网上的帖子修改配置文件后也没有效果。后来偶然间看到一篇文章,把fastjson改为默认序列化插件,加入后就没有问题了。
1 package com.leenleda.ward.tv.admin.interceptor; 2 3 import com.alibaba.fastjson.serializer.SerializerFeature; 4 import com.alibaba.fastjson.support.config.FastJsonConfig; 5 import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; 6 import com.leenleda.ward.tv.common.config.LeenledaConfig; 7 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.context.annotation.Configuration; 9 import org.springframework.http.MediaType; 10 import org.springframework.http.converter.HttpMessageConverter; 11 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; 12 import org.springframework.web.servlet.config.annotation.EnableWebMvc; 13 import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 14 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 15 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 16 17 import javax.annotation.Resource; 18 import java.util.ArrayList; 19 import java.util.Arrays; 20 import java.util.List; 21 22 23 /** 24 * @Author: pengbenlei 25 * @Date: 2020/2/19 11:22 26 * @Description: 27 */ 28 @Configuration 29 @EnableWebMvc 30 public class CustomMVCConfiguration implements WebMvcConfigurer { 31 32 @Resource 33 LoginInterceptor loginInterceptor; 34 35 @Autowired 36 LeenledaConfig leenledaConfig; 37 38 @Override 39 public void addInterceptors(InterceptorRegistry registry) { 40 //登录拦截器 41 registry.addInterceptor(loginInterceptor).addPathPatterns("/admin/**").excludePathPatterns(Arrays.asList("/file/**")); 42 } 43 44 /** 45 * 添加静态资源文件,外部可以直接访问地址 46 * 47 * @param registry 48 */ 49 @Override 50 public void addResourceHandlers(ResourceHandlerRegistry registry) { 51 String locationPath = "file:" + leenledaConfig.getLeenledaUploadRoot() + "/leenleda/application/"; 52 registry.addResourceHandler("/file/**") 53 .addResourceLocations(locationPath); 54 } 55 56 @Override 57 public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 58 59 for (int i = converters.size() - 1; i >= 0; i--) { 60 if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) { 61 converters.remove(i); 62 } 63 } 64 FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); 65 FastJsonConfig config = new FastJsonConfig(); 66 config.setSerializerFeatures( 67 SerializerFeature.WriteMapNullValue, // 是否输出值为null的字段,默认为false 68 SerializerFeature.WriteNullListAsEmpty, // 将Collection类型字段的字段空值输出为[] 69 SerializerFeature.WriteNullStringAsEmpty, // 将字符串类型字段的空值输出为空字符串 70 SerializerFeature.WriteNullNumberAsZero, // 将数值类型字段的空值输出为0 71 SerializerFeature.WriteDateUseDateFormat, 72 SerializerFeature.DisableCircularReferenceDetect // 禁用循环引用 73 ); 74 fastJsonHttpMessageConverter.setFastJsonConfig(config); 75 // 添加支持的MediaTypes;不添加时默认为*/*,也就是默认支持全部 76 // 但是MappingJackson2HttpMessageConverter里面支持的MediaTypes为application/json 77 // 参考它的做法, fastjson也只添加application/json的MediaType 78 List<MediaType> fastMediaTypes = new ArrayList<>(); 79 fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); 80 fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); 81 converters.add(fastJsonHttpMessageConverter); 82 } 83 84 }
甘于平凡,做一个甘于平凡的人,菜米油盐,生老病死。