?ajax 前臺傳入數據,但是后臺接收到的數據中文亂碼
?首先我們分析一下原因:我們調用接口的時候傳入的中文,是沒有亂碼的
?此時我們看一下Java后臺接口對應的編碼:
-
默認情況:Servlet容器(如Tomcat)默認使用ISO-8859-1解碼請求參數
-
中文問題:中文字符在ISO-8859-1編碼下會變成亂碼
?我們的程序是跑在tomcat 上面的,自然使用的是默認的編碼:ISO-8859-1,我是使用tomcat插件啟動的項目,并沒有設置編碼,所有采用的是默認的編碼
如何來解決編碼的問題,那就是:
-
告訴Servlet容器使用UTF-8解碼請求體(POST參數)
-
必須在第一次調用
request.getParameter()
之前設置才有效
?
?
?
?如果在每個接口方法的前面都加上:
request.setCharacterEncoding("UTF-8");
就可以解決中文亂碼的原因,但是這樣的代碼要在所有的接口中寫一遍,確實優點不近人情,那么有沒有什么好的解決辦法,存在一個過濾器是在dispaterServlet 分發任務之前就可以執行,
所以我們可以在設置設置所有的方法都執行某個filter 這樣就是統一設置編碼了
?原生的過濾器:
public interface Filter {default void init(FilterConfig filterConfig) throws ServletException {}void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;default void destroy() {}
}
其實我們只要實現這個接口,就可以了,我們可以寫自己的過濾器,也可以使用spring 自帶的過濾器
<filter><filter-name>encodingFilter</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><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param>
</filter>
<filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
?處理之后;
?