参考网址:spring接收ajax参数的几种方法
@ModelAttribute 注解
使用@ModelAttribute这个方法可以直接将参数映射成pojo对象,我不加@ModelAttribute注解,直接接收pojo对象,同样能够接收到参数
前端ajax请求
<script type="text/javascript"> $(function(){ $.ajax({ type:"post", url:"http://localhost:8080/test", data:{ "name":"张三", "phone":"10086", "password":"123456" }, async:true, success:function(data){ console.log(data); } }); }) </script>
java接收参数
@RequestMapping("/test") @ResponseBody public String testUser(@ModelAttribute("TUser") TUser user){ System.out.println(user.getName()); System.out.println(user.getPassword()); System.out.println(user.getPhone()); return "ok"; }
映射结果
@PathVariabl 注解
@PathVariable 是把请求的路径上的指定的分段点映射成指定的参数名称,@PathVariable可以指定多个,如果一个参数都不放在url路径中,直接请求访问。http://localhost:8080/test。同样能够接收到参数
前端ajax请求
<script type="text/javascript"> $(function(){ $.ajax({ type:"post", url:"http://localhost:8080/test/10086", data:{ "name":"张三", "password":"123456" }, async:true, success:function(data){ console.log(data); } }); }) </script>
java接收参数
@RequestMapping("/test/{phone}") @ResponseBody public String testUser(String name,@PathVariable String phone,String password){ System.out.println(name); System.out.println(phone); System.out.println(password); return "ok"; }
映射结果
直接用HttpServletRequest获取
前端代码等同于案例一
java接收参数
@RequestMapping("/test") @ResponseBody public String testUser(HttpServletRequest request, HttpServletResponse response){ System.out.println(request.getParameter("name")); System.out.println(request.getParameter("phone")); System.out.println(request.getParameter("password")); return "ok"; }
映射结果完全相同于案例一
@RequestParam绑定请求参数
前端请求代码等同于案例一
java接收参数
@RequestMapping("/test") @ResponseBody public String testUser(@RequestParam("name") String a,@RequestParam("phone") String b, String password){ /** * @RequestParam() 里边的值必须要和前端传递过来的参数名字相同 */ System.out.println(a); System.out.println(b); System.out.println(password); return "ok"; }
映射结果完全相同
总结:
1、如果前端传递过来的参数与后台接口定义的参数名相同,可以不需要任何注解,如果所有参数都在一个pojo对象中,那么可以直接映射成pojo对象,也可以使用 HttpServletRequest 接收参数
2、如果想使用 resfull 风格的请求方式的话,可以使用 @PathVariable 进行注解
3、如果前端传递的参数与后台接口定义的参数名称不相同,那么就使用 RequestParam 注解