Spring Boot请求处理之常用参数注解使用教程

下面是“Spring Boot请求处理之常用参数注解使用教程”的完整攻略。

下面是“Spring Boot请求处理之常用参数注解使用教程”的完整攻略。

介绍

在使用 Spring Boot 处理 HTTP 请求时,我们经常需要获取请求的数据,比如请求参数、请求头等信息。Spring Boot 提供了一些常用的参数注解,可以帮助我们轻松地获取这些数据。本教程将介绍常用的参数注解以及如何使用它们。

本教程的内容如下:

  1. 获取请求参数
  2. @RequestParam
  3. @PathVariable
  4. @RequestBody
  5. 获取请求头信息
  6. @RequestHeader

获取请求参数

@RequestParam

@RequestParameter 注解用于获取请求参数。使用该注解时需要指定参数名,例如:

@GetMapping("/hello")
public String hello(@RequestParam("name") String name) {
    return "Hello, " + name + "!";
}

上面的例子中,我们使用 @RequestParam 注解来获取名为 "name" 的请求参数。这个参数将被注入到 name 参数中,然后我们可以使用这个参数来构造响应。

如果请求中没有传递该参数,那么 Spring Boot 将会抛出 MissingServletRequestParameterException 异常,我们可以通过设置默认值来解决这个问题,例如:

@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
    return "Hello, " + name + "!";
}

上面的例子中,如果请求中没有 "name" 参数,那么默认值 "World" 将会被使用。如果请求中有 "name" 参数,则该参数的值将会覆盖默认值。

@PathVariable

@PathVariable 注解用于获取 URL 中的路径变量。使用该注解时需要指定变量名,例如:

@GetMapping("/hello/{name}")
public String hello(@PathVariable String name) {
    return "Hello, " + name + "!";
}

上面的例子中,我们使用 @PathVariable 注解来获取 URL 中的 "name" 路径变量。这个变量将被注入到 name 参数中,然后我们可以使用这个参数来构造响应。

@RequestBody

@RequestBody 注解用于获取请求体中的数据。使用该注解时需要指定一个 POJO 类型,例如:

@PostMapping("/user")
public ResponseEntity<?> createUser(@RequestBody User user) {
    userRepository.save(user);
    return ResponseEntity.ok().build();
}

上面的例子中,我们使用 @RequestBody 注解将请求体中的数据反序列化为一个 User 对象,然后将该对象保存到数据库中。

获取请求头信息

@RequestHeader

@RequestHeader 注解用于获取请求头中的数据。使用该注解时需要指定头部名称,例如:

@GetMapping("/user-agent")
public String getUserAgent(@RequestHeader("User-Agent") String userAgent) {
    return "User agent: " + userAgent;
}

上面的例子中,我们使用 @RequestHeader 注解来获取名为 "User-Agent" 的请求头。这个头部的值将被注入到 userAgent 参数中,然后我们可以使用这个参数来构造响应。

另外,如果请求中没有传递该头部,那么 Spring Boot 将会抛出 MissingRequestHeaderException 异常,我们可以通过设置默认值来解决这个问题,例如:

@GetMapping("/user-agent")
public String getUserAgent(@RequestHeader(value = "User-Agent", defaultValue = "Unknown") String userAgent) {
    return "User agent: " + userAgent;
}

上面的例子中,如果请求中没有 "User-Agent" 头部,那么默认值 "Unknown" 将会被使用。如果请求中有 "User-Agent" 头部,则该头部的值将会覆盖默认值。

示例说明

下面是两个示例说明:

示例一

我们想要实现一个接口,可以接收一个整数参数,并返回该整数的平方。我们可以使用 @RequestParam 注解来获取参数,例如:

@GetMapping("/square")
public int square(@RequestParam("n") int n) {
    return n * n;
}

上面的例子中,我们使用 @RequestParam 注解来获取名为 "n" 的请求参数,并将其解析为一个整数。然后我们返回该整数的平方。

如果我们发送一个 GET 请求 http://localhost:8080/square?n=4,则该接口的响应结果为 16。

示例二

我们想要实现一个接口,可以接收一个用户的基本信息,包括用户名、邮箱和密码,并将这个用户信息保存到数据库中。我们可以使用 @RequestBody 注解将请求体反序列化为一个 User 对象,并将该对象保存到数据库中,例如:

@PostMapping("/user")
public ResponseEntity<?> createUser(@RequestBody User user) {
    userRepository.save(user);
    return ResponseEntity.ok().build();
}

上面的例子中,我们将请求体中的数据反序列化为一个 User 对象,并将该对象保存到数据库中。

如果我们发送一个 POST 请求 http://localhost:8080/user,并且请求体为以下 JSON 数据:

{
  "username": "John Doe",
  "email": "johndoe@example.com",
  "password": "password"
}

则该接口将会创建一个用户名为 "John Doe",邮箱为 "johndoe@example.com",密码为 "password" 的用户,并返回状态码 200。

本文标题为:Spring Boot请求处理之常用参数注解使用教程

基础教程推荐