在使用spring-mvc的mvc的時候既享受它帶來的便捷,又頭痛它的一些問題,好比經典的中文亂碼問題。如今是用json做爲客戶端和服務端 的數據交換格式貌似很流行,可是在springmvc中有時候會由於咱們的各類疏忽從而形成頁面ajax請求到的相應數據,若是帶有中文經常是以 「????」顯示,讓人很惱火。在網上搜索後有不少解決的方案,方案都說中文亂碼問題牽扯到springmvc的 StringHttpMessageConverter類,給出的答案都是本身去寫個類繼承它,而後用一堆眼花繚亂的配置去在beans.xml中去配 置,並且還必需要配置在<mvc:annotation-driven/>標籤以前,不然。。。。
我也出現了json中文亂碼問題,搜出了一大堆方案後大喜,一個接一個的去測試。結果很失望:竟然沒一個可以解決個人問題!這不奇怪麼,並且那麼繁瑣的過程讓人望而生畏,又去是讀源碼又是覆蓋方法什麼,都說緣由之所在於: html
- ......
- public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {
-
- public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
- ......
我認爲這的確是主要緣由,而後那麼一大堆的代碼和配置,我看的眼花繚亂。我在想,是否有簡便的方法呢?還真讓我找出來2個簡便的方法:
1.在action中取得response,由他寫入響應數據。
- response.setHeader("Cache-Control", "no-cache");
- response.setContentType("text/json;charset=UTF-8");
- response.setCharacterEncoding("UTF-8");
- PrintWriter out = response.getWriter();
- out.write(result);
2.在aciton的須要返回json的方法的@requestmaping中寫入
- @ResponseBody
- @RequestMapping(value="/list", produces = "text/html;charset=UTF-8")
- public String getBookList(HttpServletResponse response){String result = bookService.bookListFromJson();return result;
- }
如此竟然也完美的解決了個人問題,並且還不用去覆蓋源碼中的方法,還省去了大堆的配置,不亦樂乎?
不過我看的解決方案中我認爲寫的最詳細最好的仍是這位哥們的文章:點擊打開連接
我按照他的解決方案沒有解決個人問題,不過仍是有啓發的。 java