返回

巧用@PutMapping、@PatchMapping和@DeleteMapping,让你的RESTful API更显灵活性

后端

利用 @PutMapping、@PatchMapping 和 @DeleteMapping 构建高效 RESTful API

构建 RESTful API 时,选择正确的 HTTP 请求方法至关重要。HTTP 请求方法决定了客户端与服务器通信的方式,影响服务器对请求的处理。@PutMapping@PatchMapping@DeleteMapping 是 Spring Boot 中常用的三个注解,用于更新、局部更新和删除资源。本文将深入探讨这些方法,帮助你构建高效且易用的 API。

更新整个资源:@PutMapping

@PutMapping 用于替换现有资源的整个状态。它通常用于用新数据完全覆盖现有数据。例如,你可以在更新用户信息时使用 @PutMapping ,将旧信息完全替换为新信息。

@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
    User existingUser = userService.findById(id);
    if (existingUser == null) {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
    user.setId(id);
    User updatedUser = userService.save(user);
    return new ResponseEntity<>(updatedUser, HttpStatus.OK);
}

局部更新资源:@PatchMapping

@PatchMapping 用于更新资源的局部状态。当只想修改资源的特定字段时,它是一个理想的选择。例如,你可以用 @PatchMapping 更新用户的名字和电子邮件,而不会影响其他字段。

@PatchMapping("/users/{id}")
public ResponseEntity<User> patchUser(@PathVariable Long id, @RequestBody Map<String, Object> updates) {
    User existingUser = userService.findById(id);
    if (existingUser == null) {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
    userService.patchUser(existingUser, updates);
    return new ResponseEntity<>(existingUser, HttpStatus.OK);
}

删除资源:@DeleteMapping

@DeleteMapping 用于从服务器中删除资源。它是一个直接且简单的方法,适用于不需要响应的情况。例如,你可以用 @DeleteMapping 删除用户。

@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
    User existingUser = userService.findById(id);
    if (existingUser == null) {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
    userService.deleteById(id);
    return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

常见问题解答

  1. 何时使用 @PutMapping,何时使用 @PatchMapping?

    • @PutMapping: 用于替换整个资源。
    • @PatchMapping: 用于局部更新资源。
  2. 使用 @PatchMapping 时,如何指定要更新的字段?
    使用 @RequestBody Map<String, Object> 传递一个键值对映射,其中键是字段名称,值是要更新的值。

  3. @DeleteMapping 返回什么?
    它不返回任何内容,因此通常返回一个 HttpStatus.NO_CONTENT 响应。

  4. 这些注解需要其他哪些依赖项?
    它们需要 spring-boot-starter-web 依赖项。

  5. 这些注解有哪些其他功能?
    它们支持 producesconsumes 属性,用于指定请求和响应的媒体类型。

结论

@PutMapping@PatchMapping@DeleteMapping 是构建 RESTful API 时强大的工具。通过理解它们的用法,你可以为你的用户创建直观且高效的交互。记住选择正确的请求方法可以显着影响 API 的整体设计和性能。