SpringMVC RESTful中文亂碼

開發中常遇到各類中文亂碼不多心煩,這裏總結了各類中文亂碼http://www.javashuo.com/article/p-kzancbil-ch.htmljavascript

下面以SpringMVC遇到的中文亂碼爲例詳解html

首先上代碼java

前臺:jquery

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <table width="100%" border="1" cellspacing="1" cellpadding="0">
        <tr>
            <td><a href="#" onclick="add()">添加</a></td>
            <td><a href="#" onclick="del()">刪除</a></td>
            <td><a href="#" onclick="select()">查詢</a></td>
            <td><a href="#" onclick="update()">修改</a></td>
        </tr>
    </table>
<script type="text/javascript">
    function add(){
        $.ajax({
            type:"POST",
            url:"lll.do",
            data:{id:"添加11111111111"}});
    }


    function del(){
        $.ajax({
            type:"DELETE",
            url:"lll.do",
            data:{id:"刪除11111111111"}});
    }

     function select(){
        $.ajax({
            type:"GET",
            url:"lll.do",
            data:{id:"查詢3333333333"}});
    }

     function update(){
        $.ajax({
            type:"PUT",
            url:"lll.do",
            data:{id:"修改4444444"}});
    }
</script>

前臺代碼很是簡單,主要是是個按鈕,分別觸發四個ajax請求,請求路徑同樣,只是請求方式不同ajax

GET(SELECT):從服務器查詢,能夠在服務器經過請求的參數區分查詢的方式。  
POST(CREATE):在服務器新建一個資源,調用insert操做。  
PUT(UPDATE):在服務器更新資源,調用update操做。  
DELETE(DELETE):從服務器刪除資源,調用delete語句

再看後臺代碼:數據庫

@RequestMapping(value = "/lll.do", method = RequestMethod.DELETE)
    @ResponseBody
    public String test(String id){
        System.out.println("刪除");
        System.out.println(id);
        return id;
    }

    @RequestMapping(value = "/lll.do", method = RequestMethod.POST)
    @ResponseBody
    public String test1(String id){
        System.out.println("添加");
        System.out.println(id);
        return id;
    }

    @RequestMapping(value = "/lll.do", method = RequestMethod.PUT)
    @ResponseBody
    public String test2(String id){
        System.out.println("修改");
        System.out.println(id);
        return id;
    }

    @RequestMapping(value = "/lll.do", method = RequestMethod.GET)
    @ResponseBody
    public String test3(String id){
        System.out.println("查詢");
        System.out.println(id);
        return id;
    }

四個方法分別對應增刪改查,只是簡單的輸出一下,想要數據庫操做自行定義service和dao吧,相信難不倒你們。apache

分別點擊增刪改查按鈕,控制檯結果以下:tomcat

添加                 //post
添加11111111111

刪除                 //delete
null

修改                //put
null

查詢                //get
查询3333333333

這是不加任何配置和字符過濾器的結果服務器

那麼怎麼處理這些亂碼呢?app

相信你們對get的請求的亂碼最爲熟悉,對於這種亂碼處理結果有三種分別是設置服務器編碼方式、進行URL編碼和接收參數時設置參數編碼,詳細可見個人上篇博客,連接開頭已給出

解決辦法:這裏我用的是meavn搭建的項目,使用的是tomcat7-maven-plugin插件,全部直接在插件裏配置

<plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <!--配置端口號-->
          <port>8080</port>
          <!--配置訪問路徑,此處配置爲根目錄,即http://localhost/-->
          <path>/SSM</path>
          <uriEncoding>UTF-8</uriEncoding>//這裏配置插件的編碼方式
        </configuration>
      </plugin>

配置完,從新啓動再次點擊查詢結果以下:

查詢
查詢3333333333

而PUT和DELETE方式接收的參數爲null,怎麼辦呢?

能夠在參數前面加入@RequestBody註解,爲何加這個註解呢?他有什麼用?詳解參考個人這篇博客http://www.javashuo.com/article/p-rxoskkrr-bz.html

//加入@RequestBody
(@RequestBody String id)

結果以下:
刪除
id=%E5%88%A0%E9%99%A411111111111

修改
id=%E4%BF%AE%E6%94%B94444444

值是有了,可是仍是亂碼?看的真心煩,因爲@RequestBody接收的是請求體中的JSON字符串,而我上傳的是JSON對象,那怎麼把JSON對象轉化成JSON字符串呢?

那就辦法多了,這裏列出兩種方法:

方法一:
 function del(){
    var data={id:"刪除11111111111"};
        $.ajax({
            type:"DELETE",
            url:"lll.do",
            data:JSON.stringify(data)//使用JSON.stringify()將JSON對象轉化成JSON字符串
            });
    }

方法二:
function update(){
     var data='{id:"刪除11111111111"}';//直接定義JSON字符串
        $.ajax({
            type:"PUT",
            url:"lll.do",
            data:data});
    }

看到全部的亂碼都解決了,內心美滋滋!!!

查詢
查詢3333333333

添加
添加11111111111

修改
{id:"刪除11111111111"}

刪除
{"id":"刪除11111111111"}
相關文章
相關標籤/搜索