請求亂碼解決之get亂碼問題 GET請求亂碼原因分析 GET請求參數是通過請求行中的URL發送給Web伺服器(Tomcat)的。 Tomcat伺服器會對URL進行編碼操作(此時使用的是Tomcat設置的字元集,預設是iso8859-1) 到了我們的應用程式中的請求參數,已經是被Tomcat使用ISO ...
請求亂碼解決之get亂碼問題
GET請求亂碼原因分析
GET請求參數是通過請求行中的URL發送給Web伺服器(Tomcat)的。
Tomcat伺服器會對URL進行編碼操作(此時使用的是Tomcat設置的字元集,預設是iso8859-1)
到了我們的應用程式中的請求參數,已經是被Tomcat使用ISO8859-1字元集進行編碼之後的了。
解決方式
方式一
修改tomcat配置文件,指定UTF-8編碼,如下:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
方式二
對請求參數進行重新編碼
String username = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
方式三
過濾器+請求裝飾器統一解決請求亂碼
- MyRequestWrapper
- MyCharacterEncodingFilter
請求亂碼解決之post亂碼問題
在web.xml中加入:
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
響應亂碼之post亂碼問題
使用@RequestMapping註解中的produces屬性,指定響應體的編碼格式
方式一:方法體上
@RequestMapping(value = "findItem",produces = "application/json;charset=utf8") @ResponseBody public String findItem(Integer id) { return "接收到的請求參數是:" + id; }
方式二:類上(統一管理編碼格式)
//@Controller //RestController:註解相當於Controller註解和ResponseBody註解的結合體 @RestController @RequestMapping(value = "item",produces = "application/json;charset=utf8") public class ItemController {}