问题原因
问题原因写了一个响应请求 返回一串中文 乱码:
@RequestMapping(value = "/hello.form")
@ResponseBody
public String hello(HttpServletResponse response){
return "hello Spring MVC!我是中文";
}
出现乱码情况
解决方法
上面这个乱码曾经改过,一个是设置@RequestMapping(value = “/hello.form”, produces = “application/json; charset=utf-8”) 为 utf-8但是并没有作用,然后也设置过过滤器,还配置过Spirng里那个设置字符编码的类然后配置到IOC这种操作,但最后都没有作用。
然后我就懵逼了…
直到我看了看我之前写的SpringMVC配置,在java配置类上有一个@EnableWebMvc启用WebMVC的功能的注解。
@Configuration
@EnableWebMvc //这里如果不开启 设置@RequestMapping中的produces 请求头之类的设置不生效
@ComponentScan("thread")
public class WebConfig {
//配置Thymeleaf视图解析器
@Bean
public ViewResolver viewResolver(TemplateEngine templateEngine){
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine);
thymeleafViewResolver.setCharacterEncoding("utf-8");
return thymeleafViewResolver;
}
//配置 视图解析器需要的模板引擎
@Bean
public TemplateEngine templateEngine(ITemplateResolver iTemplateResolver){
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(iTemplateResolver);
return templateEngine;
}
//配置模板解析器 在这个类里设置 thymeleaf的 前缀 后缀 编码 是否使用缓存
@Bean
public SpringResourceTemplateResolver templateResolver(){
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setPrefix("/WEB-INF/templates");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("utf-8");
templateResolver.setCacheable(false);
return templateResolver;
}
}
@EnableWebMvc 这个注解不设置貌似SpringMVC的请求之类的操作都正常,之前一直都是默认在学的时候加习惯了,然后某一次不加,突然发现@RequestMapping 里的 produces属性会不生效