最近一段时间不想使用会话了,想感受一下牌这样比较安全,稳健的方式,顺便写一个统一的接口给浏览器还有应用。所以把一个练手项目的前台全部改成Ajax了,跳转再使用SpringMVC控制转发。对于传输JSON数据这边有了更深的一些理解,分享出来,请大家指正。
在SpringMVC中我们可以选择数种接受JSON的方式,在说SpringMVC如何接受JSON之前,我们先聊聊什么是JSON。具体的定义我也不赘述了,在JavaScript中我们经常这样定义JSON对象
var jsonObject={ “用户名”:“管理”, “密码”:123 }
这种形式的我们叫它JSON对象,同时还有一个概念叫做JSON字符串,字符串呢,顾名思义,是由“或者”“包裹起来的一个整体,我们称之为字符串。我们知道字符串是可以直接输出的,而对象不能直接输出,所以在JavaScript中,我们可以
//定义一个对象jsonObject var jsonObject={ “用户名”:“管理”, “密码”:123 }; 警报(jsonObject);
此时,会显示(对象对象)而不会输出JSON对象的内容,JavaScript向我们提供了两个工具
JSON.parse()用于将一个JSON字符串转换为JavaScript对象。JSON.stringify()用于将JavaScript值转换为JSON字符串。
引用><强>所以当我们输入强>
警报(JSON.stringify (jsonObject));就会显示{“用户名”:“admin”,“密码”:123};
*好了对于JSON的讲解就到这里了下面我们说一说SpringMVC *
既然JSON有着上述两种存在方式,那我们通过ajax向SpringMVC传值的时候,我们该传哪一种呢?
<强>我们首先尝试直接发送JSON对象强>
//定义json对象 var用户名=$(" #用户名”).val (); var密码=$(" #密码”).val (); var json={ “用户名”:用户名、 “密码”:密码 };//Jquery Ajax请求 . ajax({美元 url:“jsontest”, 类型:“文章”, 异步:没错, 数据:json, 数据类型:json, 成功:功能(数据){ 如果(数据)。userstatus===俺晒Α?{ $ (" # errorMsg ") .remove (); 其他}{ 如果($ (" # errorMsg”)。长度& lt;=0) { $("形式[name=loginForm] ") .append (errorMsg); } } } });我们首先想想SpringMVC提供了什么给我们,有一个@RequestParam的注解,对于这个注解,它的作用和我们Servlet中的request.getParameter是基本相同的。我们首先使用这个注解来获取
@RequestMapping ("/jsontest”) 公共空白测试(@RequestParam (value=" https://www.yisu.com/zixun/username ",要求=true)字符串的用户名, @RequestParam(值=" https://www.yisu.com/zixun/password ",要求=true)字符串密码){ system . out。println(“用户名:“+用户名); system . out。println(“密码:”+密码); }<强>后台成功输出的我们的参数,成功接受。强>
SpringMVC如此智能,如果我们去除@RequestParam注解,直接将两个值放入会有什么后果?
@RequestMapping ("/jsontest”) 公共空白测试(用户名的字符串,字符串密码){ system . out。println(“用户名:“+用户名); system . out。println(“密码:”+密码); }竟然同样成功了,原理我这里就不多赘述了,有兴趣的朋友们可以打断点看看。
SpringMVC提供了一个@RequestBody,它是用来处理前台定义发来的数据内容类型:不是应用程序/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
细心的朋友们或许发现了,在之前的Ajax中,我们没有定义内容类型的类型,Jquery默认使用应用程序/x-www-form-urlencoded类型。那么意思就是SpringMVC的@RequestParam注解,Servlet的request.getParameter是可以接受到以这种格式传输的JSON对象的。
为什么呢! ?就请求想必大家都不陌生,它将参数以url # 63;用户名=癮dmin”和密码=123这种方式发送到服务器,并且请求。getParameter可以接收到这种参数,我们在浏览器地址栏上也可以看到这一点。而我们Ajax使用的帖子,并且发送的是JSON对象,那么后台是如何获取到的呢?答案就在于这个内容类型x-www-form-urlencoded的编码方式把JSON数据转换成一个字串,(用户名=癮dmin”和密码=123)然后把这个字串添加到url后面,用& # 63;分割,(是不是和得到方法很像),提交方式为POST时候,浏览器把数据封装到HTTP的身体中,然后发送到服务器。所以并不会显示在url上。(这段可能有点绕口,希望大家用心理解一下。)
基于SpringMVC接受JSON参数详解及常见错误总结