zoukankan      html  css  js  c++  java
  • SpringMVC @RequestBody @RequestParam @PathVariable 等参数绑定注解详解

    request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用:

    http://blog.csdn.net/walkerjong/article/details/7946109  (关于更多参数绑定常用的注解)

    @PathVariable

               $.ajax({
                    url: ctx + '/management/cart/delete/'+id,
                    async: false,
                    cache: false,
                    type: "POST",
                    success: function (data) {
                        
                    },
                    error: function (xhr) {
                        
                    }
                });
    @ResponseBody
    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
    public int delete(@PathVariable int id){
        return 0;
    }
    //若方法参数名称和需要绑定的uri template中变量名称不一致,需要在@PathVariable("name")指定uri template中的名称
    public int delete(@PathVariable("id") int rsId){
        return 0;
    }
     

    @RequestParam

    A) 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String--> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;

    B)用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;

    C) 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;

    $.ajax({
                    url: ctx + '/management/cart/delete?id='+id,
                    async: false,
                    cache: false,
                    type: "POST",
                    success: function (data) {
                        
                    },
                    error: function (xhr) {
                        
                    }
                });
    @ResponseBody
    @RequestMapping(value = "/delete", method = RequestMethod.POST)
    public int delete(@RequestParam("id") int id){
        return 0;
    }

    @RequestBody

    该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,而是application/json, application/xml等;

    基于ajax的方法请求,将contentType设置为application/json

    var cartId = 1;
    $.ajax({
                    url: ctx + '/management/cart/delete',
                    async: false,
                    cache: false,
                    type: "POST",
                    contentType: "application/json",
                    data: cartId,
                    success: function (data) {
                        
                    },
                    error: function (xhr) {
                        
                    }
                });
    
    @ResponseBody
        @RequestMapping(value = "/delete", method = RequestMethod.POST)
        public int delete(@RequestBody Integer id) {
            return 0;
        }

    @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.

    var  params = [1,2,3];
    $.ajax({
                    url: ctx + '/management/cart/delete',
                    async: false,
                    cache: false,
                    type: "POST",
                    contentType: "application/json",
                    data: JSON.stringify(params),
                    success: function (data) {
    
                    },
                    error: function (xhr) {
                        
                    }
                });
    @ResponseBody
        @RequestMapping(value = "/deletes", method = RequestMethod.POST)
        public int deletes(@RequestBody List<Integer> ids) {
            return 0;
        }
    @ResponseBody
        @RequestMapping(value = "/create", method = RequestMethod.POST)
        public int create(@RequestBody ExtTaskAssignmentCfg extTaskAssignmentCfg) {
            UserInfo userInfo = contextService.getContextUserInfo();
            extTaskAssignmentCfg.setInsman(userInfo.getUsername());
            extTaskAssignmentCfg.setInsdate(new Date());
            return this.extTaskAssignmentCfgService.insert(extTaskAssignmentCfg);
        }
    
    var jsonObject = {};
                jsonObject.id = assignmentCfgId;
                jsonObject.activitiId = activityId;
                jsonObject.configurationDetail = configurationDetail;
                var jsonStr = JSON.stringify(jsonObject);
                $.ajax({
                    url: url,
                    async: false,
                    cache: false,
                    type: "POST",
                    contentType:"application/json",
                    data: jsonStr,
                    success: function (data) {
                    },
                    error: function (xhr) {
                        alert("保存受理人分配配置失败")
                    }
                })
    @RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) 
        @ResponseBody  
        public void saveUser(@RequestBody List<User> users) { 
             userService.batchSave(users); 
        }
    
    
    var saveDataAry=[];  
            var data1={"userName":"test","address":"gz"};  
            var data2={"userName":"ququ","address":"gr"};  
            saveDataAry.push(data1);  
            saveDataAry.push(data2);         
            $.ajax({ 
                type:"POST", 
                url:"user/saveUser", 
                dataType:"json",      
                contentType:"application/json",               
                data:JSON.stringify(saveDataAry), 
                success:function(data){ 
                                           
                } 
             }); 
  • 相关阅读:
    md笔记——HTTP知识
    百万表格难题
    微信接口改良
    md笔记——正则学习
    md笔记——编程术语
    md笔记——微信JS接口
    md笔记——使用 @font-face 引入你喜欢的字体
    博客一年记
    “挨踢”的伙食怎样?
    比尔·盖茨早年
  • 原文地址:https://www.cnblogs.com/samwang88/p/6598919.html
Copyright © 2011-2022 走看看