• Spring Boot中的RESTful API详细介绍及使用


    在Spring Boot中,RESTful API的实现通过控制器类中的方法和特定的注解来完成。每个注解对应不同的HTTP请求方法,并通过处理请求参数和返回响应来实现不同的操作。

    下面将详细解释RESTful API中的各个方面,包括@GetMapping, @PostMapping, @PutMapping, 和 @DeleteMapping的作用及区别、请求参数和返回参数。

    作用及区别

    1. @GetMapping:

      • 作用: 处理HTTP GET请求,用于获取资源。通常用于读取数据,不应更改服务器上的资源。
      • 区别: 是幂等的,多次请求相同资源不会改变服务器状态。
      • 示例:
        1. @GetMapping("/users")
        2. public List getAllUsers() {
        3. // 获取所有用户
        4. }
        5. @GetMapping("/users/{id}")
        6. public User getUserById(@PathVariable Long id) {
        7. // 获取指定ID的用户
        8. }
    2. @PostMapping:

      • 作用: 处理HTTP POST请求,用于创建新资源。通常用于提交数据,服务器会创建新的资源。
      • 区别: 不是幂等的,多次请求会创建多个资源。
      • 示例:
        1. @PostMapping("/users")
        2. public User createUser(@RequestBody User user) {
        3. // 创建新用户
        4. }
    3. @PutMapping:

      • 作用: 处理HTTP PUT请求,用于更新资源。通常用于更新现有资源的全部内容。
      • 区别: 是幂等的,多次请求相同资源会导致相同的更新结果。
      • 示例:
        1. @PutMapping("/users/{id}")
        2. public User updateUser(@PathVariable Long id, @RequestBody User user) {
        3. // 更新指定ID的用户
        4. }
    4. @DeleteMapping:

      • 作用: 处理HTTP DELETE请求,用于删除资源。通常用于删除服务器上的资源。
      • 区别: 是幂等的,多次请求相同资源删除操作只会导致资源被删除一次。
      • 示例:
        1. @DeleteMapping("/users/{id}")
        2. public void deleteUser(@PathVariable Long id) {
        3. // 删除指定ID的用户
        4. }

    请求参数

    1. @RequestBody:

      • 作用: 将请求体中的JSON数据绑定到方法参数上。
      • 使用场景: 常用于@PostMapping@PutMapping
      • 示例:
        1. @PostMapping("/users")
        2. public User createUser(@RequestBody User user) {
        3. // 请求体中的JSON数据将绑定到user对象
        4. }
    2. @PathVariable:

      • 作用: 将URL路径中的变量绑定到方法参数上。
      • 使用场景: 常用于@GetMapping, @PutMapping, 和 @DeleteMapping
      • 示例:
        1. @GetMapping("/users/{id}")
        2. public User getUserById(@PathVariable Long id) {
        3. // URL中的id将绑定到方法参数id
        4. }
    3. @RequestParam:

      • 作用: 将查询参数绑定到方法参数上。
      • 使用场景: 适用于各种HTTP方法。
      • 示例:
        1. @GetMapping("/users")
        2. public List getUsersByAge(@RequestParam int age) {
        3. // URL中的查询参数age将绑定到方法参数age
        4. }

    返回参数

    1. 返回对象:

      • 作用: 方法可以直接返回对象,Spring Boot会自动将其转换为JSON格式。
      • 示例:
        1. @GetMapping("/users/{id}")
        2. public User getUserById(@PathVariable Long id) {
        3. // 返回User对象,自动转换为JSON
        4. }
    2. ResponseEntity:

      • 作用: 可以自定义HTTP响应状态码、响应头和响应体。
      • 示例:
        1. @PostMapping("/users")
        2. public ResponseEntity createUser(@RequestBody User user) {
        3. User createdUser = userService.createUser(user);
        4. return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);
        5. }

    综合示例

    1. @RestController
    2. @RequestMapping("/api/users")
    3. public class UserController {
    4. @GetMapping
    5. public List getAllUsers() {
    6. // 获取所有用户
    7. return userService.findAll();
    8. }
    9. @GetMapping("/{id}")
    10. public ResponseEntity getUserById(@PathVariable Long id) {
    11. User user = userService.findById(id);
    12. if (user == null) {
    13. return ResponseEntity.notFound().build();
    14. }
    15. return ResponseEntity.ok(user);
    16. }
    17. @PostMapping
    18. public ResponseEntity createUser(@RequestBody User user) {
    19. User createdUser = userService.createUser(user);
    20. return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);
    21. }
    22. @PutMapping("/{id}")
    23. public ResponseEntity updateUser(@PathVariable Long id, @RequestBody User user) {
    24. User updatedUser = userService.updateUser(id, user);
    25. if (updatedUser == null) {
    26. return ResponseEntity.notFound().build();
    27. }
    28. return ResponseEntity.ok(updatedUser);
    29. }
    30. @DeleteMapping("/{id}")
    31. public ResponseEntity deleteUser(@PathVariable Long id) {
    32. userService.deleteUser(id);
    33. return ResponseEntity.noContent().build();
    34. }
    35. }

    总结

    Spring Boot中的RESTful API通过使用@GetMapping, @PostMapping, @PutMapping, 和 @DeleteMapping注解,使得每种HTTP请求类型都能简便地映射到控制器的方法上。

    通过@RequestBody, @PathVariable, 和 @RequestParam处理请求参数,并利用返回对象或ResponseEntity构建响应,使得RESTful API的开发变得高效且易维护。

  • 相关阅读:
    单体120万连接,小爱网关如何架构?
    yoloV5环境搭建与运行(windows+pytorch+kaggle)
    秋招硬件设计岗,offer拿到手软,是一种什么体验?
    【python初级】No module named ‘fcntl‘
    《深入理解计算机系统》书籍学习笔记 - 第二课 - 位,字节和整型
    有 5nm 制程工艺的 MCU 吗?
    golang gc的内部优化
    【元宇宙】30%的费用难题,跨平台发展的障碍
    C++ 【1】
    基于模糊认知图谱和遗传算法的龋齿度检测(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/qq_35759769/article/details/139619082