ajax提交 後臺返回中文亂碼問題
介面返回資料相關
使用@ResponseBody後返回NUll
說明:剛把後臺執行起來,興高采烈的測試介面資料,結果無論如何都是返回null,最終通過各種百度,發現原來是沒有引入關鍵的Jar包.解決辦法: 需要引入jackson的jar包(jackson core和jackson mapper),引入後圖:使用@RequestMapping返回中文亂碼
原因分析:(網上基本都是一致的答案)
首先: 確定的是(經過多次測試的結果)只有當返回值是 String時才會出現中文亂碼,而當返回值是Map<String, Object>或者是其它型別時,並沒有中文亂碼的出現.
然後找原因: 原因是這可以說是spring mvc的一個bug,spring MVC有一系列HttpMessageConverter去處理用@ResponseBody註解的返回值,如返回list或其它則使用 MappingJacksonHttpMessageConverter,返回string,則使用 StringHttpMessageConverter,而這個convert使用的是字符集是iso-8859-1,而且是final的。所以在當返回json中有中文時會出現亂碼。- public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
解決辦法(以及是否嘗試成功): 嘗試了很多種網上的辦法,有一些根本無用,有一些當客戶端的Accep是 application/json;時無用.最終也是結合客戶端的修改才成功解決問題的。環境: SpringMvc 3.1客戶端分為三種不同的請求:1.瀏覽器中直接Get訪問,Accept是"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"2.用Jquery的jsonp ajax請求,Accept是"*/*"3.用h5+環境下的mui ajax請求,Accept是"application/json;charset=utf-8"(PS:h5+是最近做的跨平臺移動專案的開發環境,另外就是有試過預設的Accept"application/json"的話不管伺服器端用哪種方法,在呢麼配置,都會返回亂碼,所以最後只得手動加上charset=utf-8了)注:
嘗試方法一: 在配置檔案中的mvc:annotation-driven中新增如下程式碼
- <mvc:annotation-driven >
- <!-- 訊息轉換器 -->
- <mvc:message-converters register-defaults="true">
- <bean class="org.springframework.http.converter.StringHttpMessageConverter">
- <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
嘗試方法二: 在配置檔案中的mvc:annotation-driven中新增如下程式碼
- <mvc:annotation-driven>
- <mvc:message-converters>
- <bean class="org.springframework.http.converter.StringHttpMessageConverter">
- <property name="supportedMediaTypes">
- <list>
- <span style="white-space:pre"> </span> <value>text/html;charset=UTF-8</value>
- <value>application/json;charset=UTF-8</value>
- <value>*/*;charset=UTF-8</value>
- </list>
- </property>
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
嘗試方法三: 在@RequestMapping裡的配置produces="text/html;charset=UTF-8;"
- @RequestMapping(value = "***",produces="text/html;charset=UTF-8;")
原理: 手動給對應的Accept返回制定格式編碼資料。最終結果:請求方法1返回正確的中文請求方法2返回正確的中文請求方法3無法請求,出了錯,因為produces沒有新增application/json;對應的頭部.
嘗試方法四: 在@RequestMapping裡的併發配置produces={"application/json;","text/html;charset=UTF-8;"}
- @RequestMapping(value = "***",produces={"application/json;","text/html;charset=UTF-8;"})
原理: 手動給對應的Accept返回制定格式編碼資料。最終結果:請求方法1返回中文亂碼請求方法2返回中文亂碼請求方法3返回正確的中文
嘗試方法五: 在@RequestMapping裡的併發配置produces={"text/html;charset=UTF-8;","application/json;"}
- @RequestMapping(value = "***",produces={"text/html;charset=UTF-8;","application/json;"})
注意: 這裡和上個方法的區別是,produces裡面的順序對調了原理: 手動給對應的Accept返回制定格式編碼資料。最終結果:請求方法1返回正確的中文請求方法2返回正確的中文請求方法3返回正確的中文方法四和方法五對比分析:發現produces設定多個Accept只有第一個的charset是有用的,後面的Accept設定有效(因為不設定就無法接收對應的Accept請求),但是charset設定是無效的.需要客戶端手動制定charset才行.具體原因並不清楚(原諒我並不精通)所以得出的結論是:
produces={"text/html;charset=UTF-8;","application/json;"}
這樣設定,這樣普通瀏覽器的請求就能正常顯示中文,而客戶端的模擬請求(可以是ajax或http)則手動指定Accept的charset,即可正常接收中文。客戶端使用Ajax請求跨域問題
說明:剛剛搭建的Java web後臺程式,用Http請求很正常,但是用普通的ajax請求時,出現了一個跨域問題,被拒絕訪問.解決辦法:在.net後臺佈置在IIS伺服器上的,直接可以在IIS的應用池中配置Access-Control-Allow-Origin: *就行了.PhP後臺也只需要手動配置header('Access-Control-Allow-Origin: *');header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');Java Web後臺可以再對應的tomcat伺服器上通過CORS配置跨域訪問(詳情見另一篇),這裡暫時只探討Java Web的JSONP實現於是: 這裡的Java Web後臺採用了JSONP傳輸方式來支援跨域.(缺點就是隻支援Get,而且需要伺服器端有JSONP的判斷,因為返回引數和普通的不一樣)JSONP前端程式碼:(這裡是用了JQ的jsonp請求)
- <span style="white-space:pre"> </span>$.ajax(url, {
- data: data,
- dataType: "jsonp",
- jsonpCallback: 'testGetData',
- timeout: "15000", //超時時間設定為3秒;
- type: "POST",
- success: function(response) {
- var result = 'success:' + JSON.stringify(response);
- //返回的是utf8編碼,需要手動轉為utf16
- console.log(result);
- //alert(result);
- },
- error: function(error) {
- var result = 'error:' + JSON.stringify(error);
- console.log(result);
- //alert(result);
- }
- });
JSONP傳遞Java Web後臺程式碼片段:1.在方法的最開頭獲取是否是JSONP請求-通過獲取callback引數
- //判斷是否是jsonp請求
- String jsoncallback = request.getParameter("callback");
- public static String getJsonPData(String callbackName,Map<String, Object> data) throws JsonGenerationException, JsonMappingException, IOException{
- ObjectMapper mapper = new ObjectMapper();
- String json = mapper.writeValueAsString(data);
- System.out.println("jsonp回撥:"+callbackName);
- System.out.println("jackson解析的字串:"+json);
- String result = "";
- if(callbackName==null||callbackName==""){
- //普通請求
- result = json;
- }else{
- //jsonp請求,返回的格式是類似於一個函式的字串形式(前端再執行這個回撥來獲取資料)
- result = callbackName+"("+json+")";
- }
- System.out.println("最終結果:"+result);
- return result;
- }
相關推薦
ajax提交 後臺返回中文亂碼問題
介面返回資料相關使用@ResponseBody後返回NUll說明:剛把後臺執行起來,興高采烈的測試介面資料,結果無論如何都是返回null,最終通過各種百度,發現原來是沒有引入關鍵的Jar包.解決辦法: 需要引入jackson的jar包(jackson core和jackson
87.ajax提交 後臺返回中文亂碼問題
介面返回資料相關 使用@ResponseBody後返回NUll 說明:剛把後臺執行起來,興高采烈的測試介面資料,結果無論如何都是返回null, 最終通過各種百度,發現原來是沒有引入關鍵的Jar包. 解決辦法: 需要引入jackson的jar包(jackson co
spring ajax以及頁面返回中文亂碼問題解決
clas ring 文件中 message prop div ann default pri 在spring配置文件中添加 <!--返回中文亂碼--> <mvc:annotation-driven > <!-- 消息轉
如何避免ajax提交資料出現中文亂碼
當我們使用Eclipse做WEB專案的時候,通過Eclipse啟動Web專案需要有對應的伺服器,比如tomcat。 如果使用的不是Eclipse自帶的tomcat,那麼對於tomcat字符集的設定是這個位置的server.xml中,以下以需要 UTF-8字符集為例: 在po
微信小程式後臺返回中文亂碼問題--gxy
wx.reqiest( ) 請求後臺返回的資料為: ???3???????56716,???16???????56701,???26???????56600,???24???????56459,???19???????56448,???28???????5
$.ajax()前臺資料傳至後臺,中文亂碼問題
原因:對於在網路中傳輸的字元資料,不管其編碼為什麼,java總認為是“iso-8859-1”編碼,所以從前臺取到的資料如此處理:content = new String(前臺資料.getBytes("iso-8859-1"),"utf-8");//utf-8可以換成你程式設
ajax oracle 返回中文亂碼問題
1、首先確定後端伺服器頁面的輸出是否亂碼,我用的是php,連線oracle,在oci_connect的時候,注意加上一個引數。我用的是utf8 $conn=oci_connect('yuhairong','yuhairong','10.61.129.127/orcl','A
jQuery.form.js使用ajaxSubmit()提交表單時返回中文亂碼的問題
中文出現亂碼原因通常為編碼設定不一致,使用spring mvc + jQuery.form + jsp時儘量在以下三個地方都顯示設定編碼型別: Controller: @ResponseBody @
AJAX請求在使用@RequestMapping時返回中文亂碼
情況描述:使用SSM框架的專案,需要使用ajax請求並返回資料,但是設定所有伺服器端和瀏覽器客戶端的編碼都同一為:UTF-8結果還是亂碼。 原因分析:(網上基本都是一致的答案) 首先: 確定的是(經過多次測試的結果)只有當返回值是 String時才會出現
ajax get返回中文亂碼 (jsp)
解決如下: @RequestMapping(value = "/QueryData.do", method = RequestMethod.GET, produces="text/plain;charset=UTF-8") @ResponseBody public
json在後臺封裝後,返回中文亂碼
Spring版本:3.*RELEASE 這裡統一轉換為utf-8 因為低版本的spring缺少許多方法,所以不能用produces 方案一、將json資料寫入PrintWriter 流中 @RequestMapping(value="/upload
Spring 4 MVC的post提交form時中文亂碼
pos track 亂碼 -a art charset ring value html 假設你發現Spring 4 MVC的Post請請求亂碼,請加入accept-charset的標簽為utf-8就能解決。例如以下: <form name=
Jquery 使用Ajax獲取後臺返回的Json數據後,頁面處理
[] object inpu empty 獲取 reader form 取數 oid <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtm
resin後臺輸出中文亂碼的解決辦法!
中文 Coding https -o 出現 blog XML bsp sam resin後臺輸出中文亂碼的解決辦法! 學習了:https://blog.csdn.net/kobeguang/article/details/34116429 編輯conf/resin.con
@ResponseBody註解返回中文亂碼
esp 中文亂碼 bsp ppi app span idt set body 第一種方法: @RequestMapping(value = "testPersonalValidtor",produces = "application/json;charset=utf-8")
前端處理後臺返回的亂碼圖片
字符 http com api col The 返回 color 數據類型 問題描述: 請求後臺接口,返回如下圖的亂碼。 根據全場亂字符+JFIF標記,確定是個JPEG文件的二進制流,而不是base64。 解決方法: 1 this.$axios.get(‘ap
python requests返回中文亂碼
ons enc lxml nco res gb2 main def bs4 最近在使用python爬取高考分數線時,獲得的response裏面輸出了中文亂碼: from bs4 import BeautifulSoup import requests def get
js呼叫ajax根據後臺返回的總數前端設定每頁的條數實現分頁功能
有時候前端需要實現分頁功能,但是後臺只給我們返回來總數,每頁顯示多少條資料需要我們前端來設定,貌似這個有點欺負人,哈哈哈。。話不多說直接上程式碼: (這裡需要用到layui外掛,js檔案自己去官網下載哦) var pageNumber=1;//第幾頁 var sumCount=0; //總共
ajax請求後臺返回json的兩種處理方法
1.使用SpringMvc的@ResponseBody註解(直接將資料寫入到流中),這種方法需要在springmvc-config.xml檔案中進行編碼配置,具體如下 後臺程式碼: springmvc-config.xml配置檔案,需要新增jackson相關jar包: 2.直
SpringBoot返回中文亂碼問題(使用的是fastJson)
@SpringBootApplication //下面是自動注入的時候,排除資料庫 //@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class LearnSpringBootApplicat