1398 字
约 4 分钟
0
Spring Boot JSR 380 参数校验实战:@NotNull、@Email、@Size 完整指南
Spring Boot JSR 380 参数校验实战:@NotNull、@Email、@Size 完整指南
在开发 Web 应用时,参数校验是保障接口安全和质量的最重要环节之一。Spring Boot 提供了简洁而强大的方法,让我们能够利用 Java 校验 API (JSR 380) 中定义的注解进行参数校验。
前言
JSR 380(Bean Validation 2.0)是 Java Bean 验证规范,它定义了一系列注解,用于验证 Java Bean 对象的属性是否满足特定条件。
在后端业务开发中,JSR 380 参数校验已成为标配。它能帮助我们:
- 提前拦截无效请求,减少后端数据库写入
- 提升接口性能和用户体验
- 实现“零容错”的健壮性
本小节将带大家深入学习 JSR 380 的核心注解,并结合 Spring Boot 实战,教你如何优雅地使用它。
JSR 380 是什么?
JSR 380 是 Bean Validation 2.0 的官方名称,属于 Java EE 规范,由 Oracle 领导制定。
它包括:
- 一系列验证注解(@NotNull、@Email、@Size 等)
- 验证器接口(Validator)
- 异常处理机制
Spring Boot 2.0+ 版本默认已内置了对 JSR 380 的支持,无需额外引入依赖。
JSR 380 核心注解详解
1. 必填校验类
| 注解 | 说明 | 实战示例 |
|---|---|---|
@NotNull |
验证对象值不应为 null | @NotNull(message = "用户名不能为空") |
@NotEmpty |
验证元素不为 null,且其大小/长度大于0 | @NotEmpty on String/Collection |
@NotBlank |
验证字符串不为 null,且至少包含一个非空白字符 | @NotBlank on String |
2. 数值校验类
| 注解 | 说明 | 实战示例 |
|---|---|---|
@Min(value) |
验证数字是否不小于指定的最小值 | @Min(value = 18) |
@Max(value) |
验证数字是否不大于指定的最大值 | @Max(value = 100) |
@DecimalMin |
验证浮点数是否不小于指定的最小值 | @DecimalMin("0.01") |
@DecimalMax |
验证浮点数是否不大于指定的最大值 | @DecimalMax("999.99") |
3. 格式校验类
| 注解 | 说明 | 实战示例 |
|---|---|---|
@Email |
验证字符串是否符合有效的电子邮件格式 | @Email |
@Pattern(regexp) |
验证字符串是否与给定的正则表达式匹配 | @Pattern(regexp = "\\d{6}") |
@Size(min, max) |
验证元素的大小是否在给定的最小值和最大值之间 | @Size(min = 3, max = 10) |
4. 日期校验类
| 注解 | 说明 | 实战示例 |
|---|---|---|
@Past |
验证日期或时间是否在当前时间之前 | @Past |
@PastOrPresent |
验证日期或时间是否在当前时间或之前 | @PastOrPresent |
@Future |
验证日期或时间是否在当前时间之后 | @Future |
@FutureOrPresent |
验证日期或时间是否在当前时间或之后 | @FutureOrPresent |
5. 布尔值校验类
| 注解 | 说明 | 实战示例 |
|---|---|---|
@AssertTrue |
验证布尔值是否为 true | @AssertTrue |
@AssertFalse |
验证布尔值是否为 false | @AssertFalse |
Spring Boot 集成 JSR 380 实战
1. 编写校验实体类
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
public class UserRegisterDTO {
@NotBlank(message = "用户名不能为空")
@Size(min = 3, max = 20, message = "用户名长度必须在 3-20 之间")
private String username;
@NotNull(message = "邮箱不能为空")
@Email(message = "邮箱格式不正确")
private String email;
@NotNull(message = "密码不能为空")
@Size(min = 6, message = "密码长度至少为 6 位")
private String password;
// Getter + Setter
}
2. 使用 @Valid 进行验证
import jakarta.validation.Valid;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PostMapping("/register")
public String register(@Valid @RequestBody UserRegisterDTO dto, BindingResult result) {
if (result.hasErrors()) {
return result.getFieldError().getDefaultMessage();
}
return "注册成功!";
}
}
3. 全局异常处理
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
return ex.getMessage();
}
}
JSR 380 vs Jakarta Bean Validation 对比
| 特性 | JSR 380 (Bean Validation 2.0) | Jakarta Bean Validation (4.0) |
|---|---|---|
| 规范名称 | Bean Validation 2.0 | Jakarta Bean Validation 4.0 |
| 标准包 | javax.validation |
jakarta.validation |
| Spring Boot 版本 | 2.0~2.7 | 3.0+ |
| 默认引入依赖 | 无(内置) | 无(内置) |
| 最新规范 | 2017 年发布 | 2022 年发布 |
推荐使用 Jakarta Bean Validation,因为它是未来的规范方向,Spring Boot 3.0+ 已全面切换到 Jakarta 命名空间。
自定义校验注解(JSR 380 扩展)
除了标准注解外,我们还可以定义自己的校验注解:
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Documented
@Constraint(validatedBy = MySpecialValidator.class)
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MySpecial {
String message() default "自定义校验失败";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
总结
JSR 380(Bean Validation)是 Spring Boot 开发中最常用的参数校验方案之一。通过标准注解 + AOP 切面 + 全局异常处理,我们可以轻松实现“声明式校验”。
掌握 JSR 380 后,你的接口将更加健壮、安全、高效。
相关内链推荐:
- Spring Boot AOP 实现 API 请求日志切面(自定义注解实战)
- Spring Boot 高并发使用 MDC 实现唯一请求日志追踪(彻底解决日志交错)
- Logback 日志框架详解:Spring Boot 必备的日志管理工具
SEO 优化建议:
- 标题包含核心关键词:“JSR 380”、“参数校验”、“@NotNull”、“Spring Boot”。
- 建议添加更多代码截图,提升用户动手能力。
Spring Boot JSR 380 参数校验实战:@NotNull、@Email、@Size 完整指南
http://www.clxhxhhr.top/posts/327/ 评论
0 条
还没有评论,先写一条吧。