鉴于第一次再整理这个问题的时候,整理完仍然不清楚,觉得现有文章的描述可能我不太理解。今天依然遇到了相同的问题,这次我想用通俗易懂的话说明白,希望能给大家带来帮助。
1.通俗易懂版
- @RequestBody:在遇到post和put请求,需要把参数丢在requestbody里面 。
- @RequestParm:从 request 里面拿取值,注解是获取静态 url 传入的参数 。
- @PathVariable:是从一个 url 模板里面来填充, 获取请求路径中的变量作为参数 。
对上述进行解释:
显然@RequestBody很好区分于另外两个注解,大多数时候是用于post请求的,用于接收post请求中form表单中的数据,用来接收前端传递给后端的 json 字符串中的数据(请求体中的数据)。
@RequestParam 和 @PathVariable 一样,都是用于从request请求中绑定参数的:区别在于,前者是静态的URI;后者是获取请求路径中的变量作为参数,需要和 @RequestMapping(“item/{itemId}”) 配合使用。
从上图可以看出,使用@PathVariable时,请求地址中的username是{username}是动态的;而使用@RequestParam时,请求地址中has-username是固定的。
2.名词解答版
1.requestParam(请求参数):使用@RequestParam注释将请求参数绑定到控制器中的方法参数。用于从请求访问查询参数值的@RequestParam注释。
以下是@RequestParam注释支持的参数列表:
- defaultValue -这是一个默认值,如果请求没有该值或该值为空,则作为回退机制。
- name—要绑定的参数名称
- required -参数是否为必选。如果为true,则发送该参数失败。
- value -这是name属性的别名
2.requestBody(请求体):使用@RequestBody方法参数注释表明方法参数应该绑定到HTTP请求体的值。
3.PathVariable(路径变量):使用@PathVariable,URI模板可用于在@RequestMapping方法中方便地访问URL的选定部分。@PathVariable标识在传入请求的URI中使用的模式。@PathVariable注释只有一个用于绑定请求URI模板的属性值。允许在单个方法中使用多个@PathVariable注释。但是,请确保不超过一个方法具有相同的模式。
总结:
@RequestParam is use for query parameter(static values) like: base=2&ext=4
@PathVariable is use for dynamic values like :