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"}
相关文章
相关标签/搜索