参数名与请求参数名相同有解释吗

img


百度说有映射关系,request解析请求的时候把请求参数放map里了吗,然后后端接收参数的时候,只要声明相同的参数,相当于通过参数名(相当于key),获取value值,是这意思吗?还有实体类中属性也要和前端传递的参数名相同,都是一个道理吗?

是的,你可以去了解一下@RequestParam和@RequestBody的用法

具体代码你要去@RequestMapping里面找,是它把request的内容封装好了,直接以参数的形式传递出来
如果你自己写,那肯定要写一堆request.params["id"]什么的

如果参数名与请求参数名相同会有解释的

不加@RequestParam注解

  1. 可以接收单个参数,

  2. 可以把接收的参数转换为对象,

  3. 可以接收同样的参数多个(?age=10&age=20),使用数组来接收

    //情况1
    @GetMapping("/t1")
    public String test01(String name){  
             //一个key对应一个value
        System.out.println("接收的前端参数:"+name);
        //name=jack
        return null;
    }

    //情况2
    @RequestMapping("/t2")
    public String test02(User user){
            //User对象中有id,name,age三个参数
        System.out.println(user);
        //User(id=1, name=jack, age=20)
        return null;
    }
    
    //情况3
    @RequestMapping("/get_post/get02")
    @ResponseBody
    public String get02(String[] username){   //这个使用数组的形式来接收
        //get请求,一个key对应多个value
        System.out.println(username.length);//2
        return null;
    }

发送请求://http://localhost:8080/1203/user/t2?id=1&name=jack&age=20
如果传入参数的名字和方法上的参数名字不匹配则接收不到数据

@RequestParam注解

  1. 接收参数的变量名可以和传入的名字不一样

  2. 可以接收多个参数

  3. 可以设置默认值

  4. 如果不加required属性,默认为 true,也就是说,当@RequestParam存在时,是默认required = true条件的,当接收参数不匹配时,会报错;设置为false时表示可以不传参


//情况1.
@GetMapping("/t1")
public String test01(@RequestParam("username")String name){  
      //一个key对应一个value
    System.out.println("接收的前端参数:"+name);
    //name=jack
    return null;
}

//情况2    xxx?username=zhangsan&username=lisi
@GetMapping("/t1")
public String get03(@RequestParam(value = "username",required = false) List<String> username){  //使用list来接收
        //get请求,一个key对应多个value
        System.out.println(username);//[zhangsan, lisi]
        return username.toString();
    }

是的,想深入学习就看看源码