zoukankan      html  css  js  c++  java
  • SpringMVC RESTful中文乱码

    开发中常遇到各种中文乱码很少心烦,这里总结了各种中文乱码https://www.cnblogs.com/lwx521/p/9856186.html

    下面以SpringMVC遇到的中文乱码为例详解

    首先上代码

    前台:

    <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请求,请求路径一样,只是请求方式不一样

    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吧,相信难不倒大家。

    分别点击增删改查按钮,控制台结果如下:

    添加                 //post
    添加11111111111
    
    删除                 //delete
    null
    
    修改                //put
    null
    
    查询                //get
    查询3333333333

    这是不加任何配置和字符过滤器的结果

    那么怎么处理这些乱码呢?

    相信大家对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注解,为什么加这个注解呢?他有什么用?详解参考我的这篇博客https://www.cnblogs.com/lwx521/p/9855891.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"}
  • 相关阅读:
    Java精度计算与舍入
    java--序列化及其算法透析
    java--序列化及其算法透析
    python脚本删除文件与目录的命令
    合成大西瓜CocosCreator开发源码(可跨平台构建:小程序、android...)
    如何使用C++做个简单推箱子游戏
    unityZXing二维码的生成与扫描
    第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛(同步赛)全题解
    unityZXing二维码的生成与扫描
    35岁的程序员:第20章,解脱
  • 原文地址:https://www.cnblogs.com/lwx521/p/9869710.html
Copyright © 2011-2022 走看看