Spring| 通過Spring設置請求的編碼格式

示例代碼:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0"
        metadata-complete="true">
        
	 <filter>
	     <filter-name>Set Character Encoding</filter-name>
	     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	     <async-supported>true</async-supported>
	     <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>Set Character Encoding</filter-name>
	     <url-pattern>/*</url-pattern>
	 </filter-mapping>

</web-app>

CharacterEncodingFilter內部doFilterInternal方法實現(實際回調的改方法)

@Override
protected void doFilterInternal(
		HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
		throws ServletException, IOException {

	if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
		request.setCharacterEncoding(this.encoding);
		if (this.forceEncoding) {
			response.setCharacterEncoding(this.encoding);
		}
	}
	filterChain.doFilter(request, response);
}

如果配置的是強制編碼,可以發現響應的編碼請求編碼設置成一樣了,CharacterEncodingFilter在設置完成對編碼的設置後,繼續下一個過濾器鏈的操作.


注意:
一般項目中都會配置多個filter,作爲項目的編碼設置,一般需要最先效,需要將該<filter-mapping>.. </filter-mapping>放在所有</filter-mapping>的前面.

配置多個filter時的調用鏈順序規則: ilter-mapping配置出現的順序爲依次調用 doFilter() 的順序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章