java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > @PathVariable、@RequestParam和@RequestBody的区别

SpringBoot中@PathVariable、@RequestParam和@RequestBody的区别和使用详解

作者:卷不动躺不平的粥

这篇文章主要介绍了SpringBoot中@PathVariable、@RequestParam和@RequestBody的区别和使用详解,@PathVariable 映射 URL 绑定的占位符,通过@RequestMapping注解中的{}占位符来标识URL中的变量部分,需要的朋友可以参考下

一、@PathVariable

1.1 restful风格

1.1.1 概念

一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

1.1.2 特点

1.1.3 restful风格和传统操作方式的对比

功能传统方式restful风格
查询http://127.0.0.1/item/selectUser?id=1GET http://127.0.0.1/item/selectUser/1
新增http://127.0.0.1/item/addUserPOST http://127.0.0.1/item/addUser
更新http://127.0.0.1/item/updateUserPUT http://127.0.0.1/item/updateUser
删除http://127.0.0.1/item/deleteUser?id=1DELETE http://127.0.0.1/item/deleteUser/1

1.2 @PathVariable的介绍

@PathVariable 映射 URL 绑定的占位符

1.3 @PathVariable所具有的参数

1.4 @PathVariable的使用

步骤:

  1. 通过@RequestMapping注解中的 { } 占位符来标识URL中的变量部分
  2. 在控制器中的处理方法的形参中使用@PathVariable注解去获取@RequestMapping中 { } 中传进来的值,并绑定到处理方法定一的形参上。
//请求路径:http://127.0.0.1/user/tom
@RequestMapping(value="/user/{name}")
public String username(@PathVariable(value="name") String username) {
    return username;
}

二、@RequestParam

2.1 @RequestParam定义

@RequestParam (org.springframework.web.bind.annotation.RequestParam)用于将指定的请求参数赋值给方法中的形参。

2.2 @RequestParam的参数

2.3 注意事项

2.4 @RequestParam使用

在SpringMVC框架中,可以通过定义@RequestMapping来处理URL请求。和@PathVariable一样,需要在处理URL的控制方法中获取URL中的参数,也就是?key1=value1&key2=value2这样的参数列表。通过注解@RequestParam可以轻松地将URL中的参数绑定到处理函数方法的变量中。

//请求路径:http://127.0.0.1/user/?name=tom
@RequestMapping(value="/user")
public String getUserBlog(@RequestParam(value="name") String username) {
    return name;
}

三、@RequestBody

3.1 @RequestBody简介

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST等方式进行提交。

3.2 注意事项

如果后端参数是一个对象,且该参数前是以@RequestBody修饰的,那么前端传递json参数时,必须满足以下要求:

3.3 @RequestBody使用

3.3.1 编写实体类User

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
    private String gender;
}

3.3.2 编写controller

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/addUser")
    public void addUser(@RequestBody User user){
        System.out.println(user);
    }
}

3.3.3 使用postman进行接口测试

3.3.4 后台数据输出

3.4 @RequestParam和@RequestBody

当同时使用 @RequestParam 和 @RequestBody 时,@RequestParam指定的参数可以是普通元素、 数组、集合、对象等等(即:当,@RequestBody 与@RequestParam 可以同时使用时,原SpringMVC接收 参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而@RequestParam接收的是key-value 里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。

即:如果参数时放在请求体中,传入后台的话,那么后台要用@RequestBody才能接收到;如果不是放在 请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或则形参前什么也不写也能接收。

四、@RequestParam和@PathVariable的区别

@RequestParam和@PathVariable都能够完成类似的功能——因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。要访问一篇博客文章,这两种URL设计都是可以的:

那么究竟应该选择哪一种呢?建议:

1、当URL指向的是某一具体业务资源(或资源列表),例如博客,用户时,使用@PathVariable

2、当URL需要对资源或者资源列表进行过滤,筛选时,用@RequestParam

例如我们会这样设计URL:

到此这篇关于SpringBoot中@PathVariable、@RequestParam和@RequestBody的区别和使用详解的文章就介绍到这了,更多相关@PathVariable、@RequestParam和@RequestBody的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文