Springboot注解@RequestParam和@RequestBody
- @RequestParam
@RequestMapping(value = "test")
@ResponseBody
public Object test(@RequestParam Integer userId) {
return userId;
}
-
用于指定控制器接收参数的名称:如@RequestParam("userId")代表前端必须要传递userId字段才能执行此方法,否则会报400错误。可以接收url参数和请求体参数,一旦加上必须传递对象的参数字段。不能接收application/json类型的请求;
-
使用value或name指定接收参数的名称:如@RequestParam(value = "id")或@RequestParam(name = "id"),此时就必须传递id这个请求参数,传递userId或不传都报400错误。也可以使用简便写法:@RequestParam("id")两者效果一样。
-
使用defaultValue指定参数的默认值:@RequestParam(defaultValue = "20"),不传递该请求参数,该参数会有默认值;传了该参数则不会使用默认值;注意默认值必须是字符串,即使需要的参数为其他类型,SpringMVC也会自动处理成其他的类型。
//SpringMVC自动将字符串"20"转换成整形20
@RequestMapping(value = "test")
@ResponseBody
public Object test(@RequestParam(defaultValue = "20") Integer userId) {
return userId;
}
-
使用required指定参数是否必须,@RequestParam(required = false)代表非必须。默认为true。
-
加与不加的区别:加上这个注解前端必须传递相应的参数,否则报400;如:localhost:8080/test 报400错误 ,localhost:8080/test?id=1 才能执行不加前端传与不传相应的参数都不会报错,方法都能执行。
- @RequestBody
-
主要用于接收请求体中的json字符串,所以不能接收GET请求的参数。
-
该注解只有一个required属性,用来指定参数是否为必须,默认true。所以使用这个注解的参数就不能任意指定名称了,必须和参数真实名称一致才行。
-
当参数为实体类时,会自动封装字段为实体,而@RequestParam没有这个功能。
@RequestMapping(value = "test")
@ResponseBody
public Object test(@RequestBody User user) {
return user;
}
标签:RequestParam,userId,RequestBody,参数,test,注解
From: https://www.cnblogs.com/fengxiaojie/p/16644274.html