springmvc,通过ajax方式提交页面数据,后台返回json数据中文信息乱码
本人刚开始接触springmvc,项目搭建参照https://my.oschina.net/gaussik/blog/385697。在用IDEA写登录注册的时候,想通过ajax方式提交数据到后台,然后遇到如题所述的乱码问题,然后度娘了好多,终于解决了。废话不多说,直接上代码。
首先是登录页面login.jsp
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <%-- 2 Created by IntelliJ IDEA. 3 User: PENG027 4 Date: 2016/11/11 5 Time: 15:48 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" language="java" %> 9 <html> 10 <head> 11 <title>index</title> 12 <script type="text/javascript" src="/js/jquery.min.js"></script> 13 <script type="text/javascript"> 14 function login() { 15 var name=$("#id1").val(); 16 var pwd=$("#id2").val(); 17 $.ajax({ 18 url:'/login', 19 type:'post', 20 contentType:'application/json', 21 data:JSON.stringify({'username':name,'password':pwd}), 22 dataType:'json', 23 async:false, 24 success:function (msg) { 25 // alert("页面内容改变"); 26 // $("#p").text(msg.msg); 27 window.location.href="success.jsp?id="+Math.random(); 28 }, 29 error:function () { 30 alert("failure"); 31 } 32 }); 33 } 34 </script> 35 </head> 36 <body> 37 <form> 38 username:<input id="id1" type="text" name="username"/><br> 39 password:<input id="id2" type="password" name="password"/><br> 40 <input id="id3" type="button" value="登录" onclick="login()"/><br> 41 <%--<p id="p">点击登录之后我会改变</p>--%> 42 </form> 43 </body> 44 </html>
然后是后台Java代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package controller; 2 3 import org.json.JSONException; 4 import org.json.JSONObject; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.ui.Model; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.ResponseBody; 9 10 @Controller 11 public class MainController { 12 @ResponseBody 13 /* 14 注意了,就是这儿。我之前是这么写的。修改之后记得重启服务器。 15 @RequestMapping("/login") 16 */ 17 @RequestMapping(value = "/login", produces = {"text/html;charset=UTF-8;"}) 18 public String hello(Model model) { 19 JSONObject jsonObject = new JSONObject(); 20 try { 21 jsonObject.put("msg","中文乱码"); 22 } catch (JSONException e) { 23 e.printStackTrace(); 24 } 25 return jsonObject.toString(); 26 // return "success"; 27 } 28 }
修改之后记得重启服务器
修改之后记得重启服务器
修改之后记得重启服务器
重要的事说三遍,修改的地方就加上
produces = {"text/html;charset=UTF-8;"}
这几个字,但是没有重启服务器,搞了四个小时。