spring接收ajax参数的几种方式

参考网址: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 注解

 

posted @ 2018-05-02 13:42  幺丸  阅读(14677)  评论(0编辑  收藏  举报