对于mvc中的get请求注解之前自己一直迷迷糊糊的,不知道有那些注解,也不太清楚它们该在何时使用,通过简单的小测试让自己理解了其功能和使用。在此做个记录。 @PathVariable和@RequestParam见名知意 路径变量和请求参数,它们通常是在使用get请求的时候进行定义使用的。 @PathVariable:路径变量 @RequestParam:请求参数
最近在写代码的时候,一个 xxx/{id}的请求方式,自己忘了加@PathVariable导致报错,因此测试一下不同的场景和作用。 首先定义一些简单的方法,这里都加上了@ResponseBody 统一返回string。 这里针对路径变量和请求参数分别进行了不同情况的测试,@PathVariable加注解和不加注解以及@RequestParam加注解和不加注解 。
测试
@ResponseBody
@GetMapping("/test1/{id}")
public String test1(String id){
return "路径变量不加注解能否获取" + id;
}
@ResponseBody
@GetMapping("/test11/{id}")
public String test11(@PathVariable("id") String id){
return "路径变量加注解能否获取" + id;
}
@ResponseBody
@GetMapping("/test2")
public String test2(String id){
return "requestParam-不加注解" + id;
}
@ResponseBody
@GetMapping("/test21")
public String test21(String id,String name){
return "requestParam 不加注解 - 两个参数" + id + name;
}
@ResponseBody
@GetMapping("/test22")
public String test22(@RequestParam("id") String id,@RequestParam("name") String name){
return "requestParam加注解 - 两个参数" + id + name;
}
结论
@ResponseBody
@GetMapping("/test1/{id}")
public String test1(String id){
return "路径变量不加注解能否获取" + id;
/*
对于路径变量,如果没有加注解 那么获取不到值,哪怕只有一个参数
(请求路径 显示结果)
http://localhost:30000/test1/1 路径变量不加注解能否获取 null
http://localhost:30000/test11/1 路径变量加注解能否获取 1
*/
}
@ResponseBody
@GetMapping("/test11/{id}")
public String test11(@PathVariable("id") String id){
return "路径变量加注解能否获取" + id;
}
@ResponseBody
@GetMapping("/test2")
public String test2(String id){
return "requestParam-不加注解" + id;
}
@ResponseBody
@GetMapping("/test21")
public String test21(String id,String name){
return "requestParam 不加注解 - 两个参数" + id + name;
}
/*
(请求路径 显示结果)
http://localhost:30000/test21 requestParam 不加注解 - 两个参数nullnull
http://localhost:30000/test21?id=11 requestParam 不加注解 - 两个参数11 null
http://localhost:30000/test21?id=11&name2=zhangsan requestParam 不加注解 - 两个参数11 null
未加注解时,传参数和不传参数都可以,传了参数能接收,不传也不影响,错误的参数名也不报错。
*/
@ResponseBody
@GetMapping("/test22")
public String test22(@RequestParam("id") String id,@RequestParam("name") String name){
return "requestParam加注解 - 两个参数" + id + name;
}
/*
对于定义了RequestParam注解时,此时该方法必须传定义的两个参数(默认为true)
如果存在一个参数没有那么会报错,或者说参数名称不一致也会报错,因为其中一个参数没有
http://localhost:30000/test22 未传参数报 参数不存在异常
There was an unexpected error (type=Bad Request, status=400).
Required String parameter 'id' is not present
http://localhost:30000/test22?id=1&name=zhangsan requestParam加注解 - 两个参数1zhangsan
http://localhost:30000/test22?id=1&name2=zhangsan 当name参数传错时,
报name参数不存在异常,加上注解后能对参数进行校验
There was an unexpected error (type=Bad Request, status=400).
Required String parameter 'name' is not present
*/
ps:@RequestBody一般是在使用post进行注解添加的,接收的是前端传来的json数据,如果前端传来的是table表格的k-v形式的数据,此时加了注解会报错,格式错误。
|