使用RestController或者ResponseBody时,如果使用response.setContextType或者其他的encode设置,是没有效果的,就像下面这样。
@ResponseBody
@RequestMapping()
public String aaa(HttpServletResponse response){
response.setContentType("xxxxutf-8");
return "你好";
}
这很奇怪。但也不奇怪,因为很多时候response.setContentType("xxxxutf-8");这句话是在void方法里出现的,比如这样:
@RequestMapping()
public void aaa(HttpServletResponse response){
response.setContentType("xxxxutf-8");
response.getWriter().write("你好");
}
void方法设置编码就有效果。
为什么会这样?
原因在于ResponseBody内部最终把编码改成iso8859-1.
怎么解决?
在@RequestMapping里加上这个。
@ResponseBody
@RequestMapping(value = "aaa",produces = "text/xml;charset=UTF-8")
这样就可以了。