基于SpringMVC接受JSON参数详解及常见错误总结

  

最近一段时间不想使用会话了,想感受一下牌这样比较安全,稳健的方式,顺便写一个统一的接口给浏览器还有应用。所以把一个练手项目的前台全部改成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参数详解及常见错误总结