Spring Boot中的RESTful API:@GetMapping, @PostMapping, @PutMapping, 和 @DeleteMapping详解

本文详细介绍了SpringMVC中四个主要的HTTP请求映射注解(@GetMapping,@PostMapping,@PutMapping,@DeleteMapping)的用途、参数和代码示例,展示了如何通过这些注解处理GET、POST、PUT和DELETE请求,以及如何返回响应和处理请求体。
摘要由CSDN通过智能技术生成

@GetMapping

用途
@GetMapping注解用于映射HTTP GET请求到特定的处理方法上。它常用于从服务器检索信息。

参数

  • value:指定请求的路径。
  • consumes:指定能够处理的媒体类型,如"application/json"。
  • produces:指定返回的响应媒体类型,如"application/json"。
  • 其他参数,如headersparams等,用于更细粒度的请求映射。

返回值
方法返回的对象通常会自动转换为响应体,通常是一个实体对象或集合,Spring会将其序列化为JSON或XML等格式返回给客户端。

代码演示

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        // 模拟根据ID查找用户
        User user = new User();
        user.setId(id);
        user.setName("John Doe");
        user.setEmail("john.doe@example.com");
        return ResponseEntity.ok(user); // 返回找到的用户信息
    }
}

在上面的例子中,我们定义了一个UserController类,并使用@GetMapping("/{id}")注解来映射/users/{id}的GET请求到getUserById方法上。方法接收一个路径变量id,返回一个User对象作为响应体。ResponseEntity.ok(user)会创建一个状态码为200的响应,并将user对象作为响应体返回。

@PostMapping

用途
@PostMapping注解用于映射HTTP POST请求到特定的处理方法上。它常用于向服务器提交数据以创建新资源。

参数

  • 类似@GetMapping,它接受类似的参数,但通常与POST请求相关的媒体类型会有所不同。

返回值
方法通常返回新创建的资源的表示形式,或者返回状态信息表示操作的结果。

代码演示

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        // 模拟保存用户操作(实际上可能需要调用service层处理)
        Long id = 1L; // 假设这是新生成的ID
        user.setId(id); // 设置用户ID
        return ResponseEntity.created(URI.create("/users/" + id)).body(user); // 返回新创建的用户信息以及资源位置URI
    }
}

在这个例子中,我们使用了@PostMapping注解来映射POST请求到createUser方法上。该方法通过@RequestBody注解接收一个JSON格式的User对象作为请求体,并模拟保存用户操作。最后,它返回一个状态码为201的响应,表示资源已创建,并通过ResponseEntity.created()方法设置了新资源的URI位置。响应体包含了新创建的用户信息。
当然,让我们继续讨论剩下的两个注解:@PutMapping@DeleteMapping

@PutMapping

用途
@PutMapping 注解用于映射 HTTP PUT 请求到特定的处理方法上。它通常用于更新服务器上的资源。

参数

  • value:指定请求的路径。
  • consumes:指定能够处理的请求体媒体类型。
  • produces:指定返回的响应体媒体类型。
  • 其他参数,如 headersparams 等,用于更细粒度的请求映射。

返回值
方法通常返回更新后的资源表示或状态信息,表明操作的结果。

代码演示

@RestController
@RequestMapping("/users")
public class UserController {

    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User updatedUser) {
        // 模拟更新用户操作(实际上可能需要调用service层处理)
        User user = new User(); // 假设这是从数据库中检索到的用户对象
        user.setId(id);
        user.setName(updatedUser.getName()); // 更新用户名
        user.setEmail(updatedUser.getEmail()); // 更新电子邮件地址
        return ResponseEntity.ok(user); // 返回更新后的用户信息
    }
}

在这个例子中,我们使用了 @PutMapping("/{id}") 注解来映射 PUT 请求到 updateUser 方法上。该方法通过 @PathVariable 注解接收路径变量 id,并通过 @RequestBody 注解接收一个 JSON 格式的 User 对象作为请求体,该对象包含了要更新的用户信息。然后,方法模拟了更新用户操作,并返回一个状态码为 200 的响应,表示更新成功。响应体包含了更新后的用户信息。

@DeleteMapping

用途
@DeleteMapping 注解用于映射 HTTP DELETE 请求到特定的处理方法上。它通常用于删除服务器上的资源。

参数

  • value:指定请求的路径。
  • 其他参数,如 headersparams 等,用于更细粒度的请求映射。由于 DELETE 请求通常不包含请求体,因此没有 consumes 参数。

返回值
方法通常返回一个状态信息,表明删除操作的结果,而不返回删除的资源本身(因为资源已被删除)。

代码演示

@RestController
@RequestMapping("/users")
public class UserController {

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        // 模拟删除用户操作(实际上可能需要调用service层处理)
        // 假设删除成功
        return ResponseEntity.noContent().build(); // 返回状态码为204的响应,表示删除成功并且没有响应体内容
    }
}

在这个例子中,我们使用了 @DeleteMapping("/{id}") 注解来映射 DELETE 请求到 deleteUser 方法上。该方法通过 @PathVariable 注解接收路径变量 id,模拟了删除用户操作,并返回一个状态码为 204 的响应,表示删除成功。由于资源已被删除,响应体为空(使用 Void 类型表示)。ResponseEntity.noContent() 创建了一个没有响应体的响应。

  • 32
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值