springboot ajax(@ResponseBody)请求返回的值 出现乱码
responsebody默认response返回的格式是ISO-8859的编码,也就是欧洲编码不支持中文。
一般在ssm框架中,response.set…一下就行,但是在springboot中并不好用,而且网上还有其他的解决方案,但是有的是每次都要在注解上加条件,或者是因为配置导致了shiro或者其他的拦截报错,而且在springboot2.0之后出现新的配置WebMvcConfigurer Adapter已经被淘汰了,如果还像之前配置会出错的,2.0之后使用 WebMvcConfigurer或其子类等来进行配置。
Spring能识别json,xml转换我们需要的格式数据,是通过一个非常重要接口HttpMessageConverter 进行我们需要的格式转换,而StringHttpMessageConverter和 MappingJacksonHttpMessageConverter(高版本为MappingJackson2HttpMessageConverter) 则是HttpMessageConverter 实现类。
Converter | 说明 |
---|---|
StringHttpMessageConverter | 负责读取字符串格式的数据和写出二进制格式的数据(当返回值时或者接受值是String类型时,是由这个处理) |
MappingJacksonHttpMessageConverter MappingJackson2HttpMessageConverter | 负责读取和写入json格式的数据;(当返回值是对象或者List,就由这个处理) |
ByteArrayHttpMessageConverter | 负责读取二进制格式的数据和写出二进制格式的数据; |
FormHttpMessageConverter | 负责读取form提交的数据(能读取的数据格式为 application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入application/x-www-from-urlencoded和multipart/form-data格式的数据; |
ResourceHttpMessageConverter | 负责读取资源文件和写出资源文件数据; |
SourceHttpMessageConverter | 负责读取和写入 xml 中javax.xml.transform.Source定义的数据; |
Jaxb2RootElementHttpMessageConverter | 负责读取和写入xml 标签格式的数据; |
AtomFeedHttpMessageConverter | 负责读取和写入Atom格式的数据; |
RssChannelHttpMessageConverter | 负责读取和写入RSS格式的数据; |
@Configuration
public class WebConfig implements WebMvcConfigurer {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// 解决controller返回字符串中文乱码问题
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof StringHttpMessageConverter) {
log.info("解决Controller返回字符串中文乱码");
((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
}
if (converter instanceof MappingJackson2HttpMessageConverter) {
log.info("解决Controller返回json中文乱码");
((MappingJackson2HttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
}
}
}