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"}