主要原因是:頁面提交時,使用<contentType:utf-8/>格式,而服務端HttpMessageConverter解碼時使用其它格式解碼(如:ISO-8859-1)導致
解決方案:在Servlet中設置CharacterEncoding為UTF-8格式。
方法一:在Web.xml中加入Spring的字符集過濾器(已測)
<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><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param> </filter> <filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern> </filter-mapping>
java post請求 json,encoding
字符集,將request字符集設置成encoding指定格式(相當于request.setCharacterEncoding)
forceEncoding
強制字符集設置,主要用來設置response字符集是否也是encoding指定格式
json.tojavaobject、當設置為true時,相當于request.setCharacterEncoding + response.setCharacterEncoding
當設置為false時(默認),相當于request.setCharacterEncoding
加入后相當于在servlet中加入下面代碼
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
方法二:手動寫Filter(未測)
java解析json報文。對每個訪問進行攔截,并執行下列代碼
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
方法三:設置HttpMessageConverter實現類的解碼方式(未測試)
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json; charset=UTF-8</value> <value>application/x-www-form-urlencoded; charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
?