Spring Tomcat Post Get 請求引數有中文時出現亂碼或+號變空格等關於編碼的問題
今天做Post,get請求的測試,出現瞭如題的錯誤,記錄一下,能力有限如有錯誤的請大家指正,謝謝!
系統環境:伺服器:Contos7,tomcat7,spring4.3.8,maven IDE:intellijj idea 2017.1.2
客戶機:win7,android studio2.31
操作:客戶機在android裡面用HttpURLConection傳送請求,與編碼有關的東西測試如下:
在伺服器端的tomcat目錄下,conf下server.xml修改<Connector ... URIEncoding="UTF-8">這個引數是設定,
1、get請求時,所接收到的客戶機發過來的引數是什麼編碼格式。如果客戶機get時的引數有中文就是用,
URLEncode.encode("中文引數",“utf-8”),將引數轉成UTF-8格式的,然後伺服器Tomcat就要設定URIEncoding="UTF-8"這個引數。
這個是GET請求的,相對來說比較簡單。
2、Post請求時,有關引數與Get的設定是不一樣的注意了。
首先,如果客戶端Post中文引數時可以直接Post中文過去,可以不用轉編碼,但如果引數中有+號或&號,這兩個符號要用在你Post
引數到伺服器之前要把這兩個字元用下面的方法要替換
param=param.replace("+","%2B");
param=param.replace("&","%26");
這樣,要不然伺服器接到到這兩個字元會直接替換成空格。具體原因不知,找了很多地方沒解決,所以直接用replace來替換,特別注意一下。
我一直很奇怪不知是哪個地方設定的,可以直接Post中文過去而不用轉碼,因為系統會自動幫你轉碼。(一直沒找到在哪裡設定的,如果有大神知道,教下小弟)
post請求的返回值如果是中文的話,可以在web.xml裡配置一個過濾器,這樣可以定義返回值是你想要的編碼。
<filter>
<filter-name>charsetFilter</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>
客戶端接到到伺服器的返回資料,再UFT-8回來就是你要想要的結果了。
另外,如果你的返回值是實體類或者List,MAP等型別的話,要可以在 Spring裡新增一個轉換器,它會自動將這些型別,轉成Json字元。
轉換器:
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!-- 配置Fastjson支援 -->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
我用的是阿里的Json工具,你也可以配成別的。
相關文章
- GET請求引數為中文時亂碼分析
- Spring MVC的Post請求引數中文亂碼的原因&處理SpringMVC
- request的get和post引數亂碼問題
- 解決ajax get post方式提交中文引數亂碼問題
- 【原創】Tomcat在處理GET和POST請求時產生的亂碼問題Tomcat
- TOMCAT 請求資料編碼亂碼 問題Tomcat
- jboss get請求中文亂碼問題的解決[zt]
- Postman 使用 Get 請求 URL 傳參中文亂碼的問題Postman
- 引數傳遞中編碼問題(Get/Post 方式)(一)
- 引數傳遞中編碼問題(Get/Post 方式)(二)
- 關於在request請求時,處理請求引數的問題
- nodejs關於get和post請求程式碼例項NodeJS
- 解決URL請求中的中文亂碼問題
- 微信公眾號傳送模板訊息,出現亂碼問題---字元中文編碼問題字元
- requests請求返回內容 中文亂碼問題
- Tomcat 5環境下的jsp中文亂碼問題(分別針對POST、GET方法)TomcatJS
- 關於在接收POST請求,Tomcat偶發性接收到的引數不全問題排查分析Tomcat
- 請教一個傳遞引數的時候中文顯示亂碼的問題。
- 小議Servlet接收post和get混合提交中文亂碼問題薦Servlet
- 關於中文亂碼問題(總結)
- 關於tomcat在idea上的中文編碼問題TomcatIdea
- Servlet中request請求Get和Post方法以及亂碼解決Servlet
- iframe利用get方式傳遞中文引數會出現亂碼解決方案
- PHP接收GET中文引數亂碼深入研究PHP
- 解決Url帶中文引數亂碼問題
- 用XMLHTTP Post/Get HTML頁面時的中文亂碼問題之完全Script解決方案 (轉)XMLHTTPHTML
- 【web】Spring RestTemplate提交時設定POST請求引數WebSpringREST
- Solaris上中文請求亂碼
- 傳送請求時,url 出現亂碼錯誤
- 解決Jquery在GET方式傳遞引數時gb2312中文編碼亂碼jQuery
- url引數中有+、空格、=、%、&、#等特殊符號的問題解決符號
- 關於本地GB2312編碼的檔案上傳github後 中文出現亂碼的問題Github
- js解決url傳引數中文亂碼問題JS
- Retrofit 動態引數(非固定引數、非必須引數)(Get、Post請求)
- 介面請求 (get、post、head 等) 詳解
- 介面請求(get、post、head等)詳解
- C# 之HTTP請求get,post帶重試引數C#HTTP
- 關於用URL類傳送POST請求的問題?