@RequestParam,@RequestBody,@PathVariable三个spring注解的区别
@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,他们接受的都是get请求的参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @PathVariable 是从一个URI模板里面来填充
一、@RequestParam
该注解适用于http的url中里通过?方式向后台发送请求,后台controller中接收前台参数的方式,比如如下的url:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
代码中可以用
@RequestMapping("/hello")
public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
//
}
这种方式获取
@RequestParam 支持如下的参数:
defaultValue:如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值
name:绑定本次参数的名称,要跟URL上面的一样
required:false表明这个参数是不是必须的,true表示必须的,如果在true的情况下,地址中没有此参数,将会报400错误
value:跟name一样的作用,是name属性的一个别名
二、@PathVariable
该注解适用于http的url使用restful方式,后台controller中接收前台参数的方式,比如如下的url:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
代码中可以用
@RequestMapping("/hello/{id}")
public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
RequestParam(value="param2", required=false) String param2){
//
}
这种方式获取
三、@RequestBody
一般是post请求的时候才会使用这个请求,把参数丢在requestbody里面,使用实体类接收
@RequestMapping("/hello")
public String getDetails(@RequestBody(value="id")User user,HttpServletRequest request){
//
}