日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring MVC Controller中返回json数据中文乱码处理

發布時間:2023/12/20 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring MVC Controller中返回json数据中文乱码处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題
在使用spring MVC Controller的過程中,發現返回到客戶端的的中文出現亂碼。后臺Java代碼:

@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = "text/json") public @ResponseBody String upload( @RequestParam("groupId") String groupId, HttpServletRequest request, HttpServletResponse response) { //... }

解決
在produce參數中加入編碼聲明 charset=UTF-8
修改后的代碼為:

@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = "text/json;charset=UTF-8") public @ResponseBody String upload( @RequestParam("groupId") String groupId, HttpServletRequest request, HttpServletResponse response) { //... }

參考資料1:

springMVC返回json數據亂碼問題及@RequestMapping 詳解

一、@RequestMapping

RequestMapping是一個用來處理請求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

RequestMapping注解有六個屬性,下面我們把她分成三類進行說明。

1、 value, method;

  • value: 指定請求的實際地址,指定的地址可以是URI Template 模式(后面將會說明);
  • method: 指定請求的method類型, GET、POST、PUT、DELETE等;

2、 consumes,produces;

  • consumes: 指定處理請求的提交內容類型(Content-Type),例如application/json, text/html;
  • produces: 指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回;

3、 params,headers;

  • params: 指定request中必須包含某些參數值是,才讓該方法處理。
  • headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。

二、json數據亂碼

在springMVC controller中返回json數據出現亂碼問題,因為沒有進行編碼,只需要簡單的注解就可以了。

@RequestMapping()中加入produces=”text/html;charset=UTF-8”屬性即可,如下:

@RequestMapping(value="/respost",method=RequestMethod.GET,produces="text/html;charset=UTF-8") @ResponseBody public String postList(@RequestParam("topicId") String topicId){ List<Post> posts=new ArrayList<Post>(); System.out.println("topicId-----"+topicId); posts=postService.findPostList(topicId); JSONArray postJson=JSONArray.fromObject(posts); return postJson.toString(); }

參考資料2:

三種方式解決你的js加載亂碼

第一種方式—編碼統一

我們以前覺得出現亂碼的原因是因為編碼不統一,就是因為我們設置編碼統一之后,就解決了問題,所以,讓html和js的編碼統一,是最簡單的一個亂碼解決方式,原因是什么,是因為,如果你在加載js的時候,并沒有聲明js的編碼格式,那么瀏覽器會默認的按照當前html的編碼格式進行解析引入的js文件,如果你的js和本身頁面編碼不一樣,并且js中引入了中文字符,那么肯定會出現亂碼的。要知道,程序都是笨笨的。

第二種方式—在引入js的標簽中加入charset屬性

這樣引入,那么這個xx.js就會以本身頁面的編碼進行解析,而如果兩個的編碼不一樣,如果這個js是gbk的編碼,那么我們可以這樣寫

<script src="../../lib/Plugins/datepicker_lang_zh_CN.js" charset="utf-8" type="text/javascript"></script>

那么,只要是保證這個js文件的確是gbk或者對應的,你自己寫的編碼,那么無論在哪種編碼的頁面中引用這個js,都不會出現編碼問題,這樣寫才是最規范的,第一種方式會出現一種情況,就是有很少情況下,由于一些不規范的原因,我們會發現即使是編碼統一的時候,也會出現亂碼,那么我們最好就是用第二種方式來寫。

第三種方式—用服務器語言聲明header頭信息

這種方式是比較少見的一種方式,適合某些特定的情況。編碼信息都是在頭信息中聲明的。而js本身并沒有像html mate標簽這樣的聲明頭信息的標簽,所以要借助服務器語言,我是學php的,其header(“Content-Type:text/html;charset=gb2312″);就可以聲明頭信息,而如何寫這個js,就是把js內容寫在php文件中,這里就有一個知識點,就是js文件并不一定非寫在js為后綴的文件中,其實可以寫的服務器文件(php文件等)中,php以

<script type="text/jscript" charset="gbk" src="xx.php"></script>

在這個xx.php寫

<? $ip = getenv('REMOTE_ADDR'); echo "alert($ip);"; ?>

這樣我們訪問這個html頁面,就會彈出ip地址,我們就可以對他進行其他操作等。當然,既然是連接服務端文件,就不能是直接雙擊打開這個html了,一定是通過瀏覽器訪問才可以,或者是連接這個php文件的src要寫http形式,目的就是保證這個php文件要是通過服務器解析訪問的,如果你這樣寫相對目錄的形式連接php,你直接打開html,就相當于直接打開了這個php文件,而不是通過http訪問的,這個php是不能被解析的。講的復雜了,但是這是一個很重要的知識點。如果單從亂碼而言,這種引用js文件的方式適合我們已經引用了,不能再修改這個引用文件了,比如我們在一些外鏈站發了文章,不能再修改了,那么,我們可以修改連接的我們網站上的這個js文件,當前前提是,連接的是服務端文件,我們就可以通過這樣的方式解決。

總結

以上是生活随笔為你收集整理的Spring MVC Controller中返回json数据中文乱码处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。