下面是 Spring Boot 参数校验的具体实现方式的完整攻略:
第一步:引入依赖
在 pom.xml 中引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
第二步:定义验证注解
在参数实体类中定义验证注解,例如:
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@NotNull(message = "密码不能为空")
private String password;
@Min(value = 18, message = "年龄不能低于18岁")
@Max(value = 120, message = "年龄不能高于120岁")
private Integer age;
// getters and setters
}
上面的代码定义了三个注解,分别为 @NotNull、@Min 和 @Max。由于 @NotNull 注解来自 javax.validation.constraints 包,因此需要引入 javax.validation:validation-api 依赖:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
第三步:编写控制器
在控制器中,通过 @Validated 注解启用验证,并通过 @RequestBody 注解指定接收的是一个 JSON 对象,例如:
@RestController
@Validated
public class UserController {
@PostMapping("/users")
public String createUser(@RequestBody @Valid User user) {
return "User created successfully";
}
}
上面的代码中,使用 @Valid 注解对 User 对象进行验证,并使用 @RequestBody 注解指定接收的是一个 JSON 对象。
第四步:处理异常
当参数验证失败时,会抛出 ConstraintViolationException 异常。为了更好地处理这个异常,我们可以定义一个 ControllerAdvice 类,例如:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
public ResponseEntity<String> handleValidationException(ConstraintViolationException e) {
String errorMessage = e.getConstraintViolations()
.stream()
.map(constraintViolation -> constraintViolation.getMessage())
.collect(Collectors.joining(", "));
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorMessage);
}
}
上面的代码中,handleValidationException 方法用于捕获 ConstraintViolationException 异常,并将错误信息返回给客户端。
示例一
下面是一个示例,用于演示如何验证 POST 请求中的参数:
请求方法:POST
请求 URL:http://localhost:8080/users
请求体:{"username":null,"password":null,"age":15}
返回结果:
400 Bad Request
Header: Content-Type: text/plain;charset=UTF-8
Body: 用户名不能为空, 密码不能为空, 年龄不能低于18岁
示例二
下面是另一个示例,用于演示如何验证 GET 请求中的参数:
请求方法:GET
请求 URL:http://localhost:8080/users?username=demo&password=admin123&age=17
返回结果:
400 Bad Request
Header: Content-Type: text/plain;charset=UTF-8
Body: 年龄不能低于18岁
以上就是 Spring Boot 参数校验的具体实现方式,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 参数校验的具体实现方式 - Python技术站