1. 空值检查
注解 | 作用 | 示例 |
---|
@NotNull | 字段不能为 null | @NotNull String name; |
@Null | 字段必须为 null | @Null String unusedField; |
@NotEmpty | 字符串/集合/数组不能为空(长度/大小 > 0) | @NotEmpty List<String> list; |
@NotBlank | 字符串不能为空且必须包含非空白字符 | @NotBlank String username; |
2. 长度/大小检查
注解 | 作用 | 属性 | 示例 |
---|
@Size | 字符串/集合/数组的长度或大小在指定范围内 | min , max | @Size(min=2, max=10) String password; |
@Length | Hibernate 扩展,字符串长度范围 | min , max | @Length(min=5, max=20) String code; |
3. 数值范围检查
注解 | 作用 | 属性 | 示例 |
---|
@Min | 数值必须 >= 指定值 | value | @Min(18) int age; |
@Max | 数值必须 <= 指定值 | value | @Max(100) int score; |
@DecimalMin | 数值 >= 指定值(字符串形式的大数) | value , inclusive | @DecimalMin("0.01") BigDecimal price; |
@DecimalMax | 数值 <= 指定值(字符串形式的大数) | value , inclusive | @DecimalMax("100.0") BigDecimal discount; |
@Positive | 数值必须为正数(>0) | - | @Positive int quantity; |
@PositiveOrZero | 数值 >= 0 | - | @PositiveOrZero int offset; |
@Negative | 数值必须为负数(<0) | - | @Negative BigDecimal loss; |
@NegativeOrZero | 数值 <= 0 | - | @NegativeOrZero int balance; |
4. 日期检查
注解 | 作用 | 示例 |
---|
@Past | 日期必须是过去时间 | @Past LocalDate birthDate; |
@PastOrPresent | 日期是过去或当前时间 | @PastOrPresent LocalDateTime timestamp; |
@Future | 日期必须是将来时间 | @Future LocalDate expireDate; |
@FutureOrPresent | 日期是将来或当前时间 | @FutureOrPresent LocalDateTime eventTime; |
5. 正则匹配
注解 | 作用 | 示例 |
---|
@Pattern | 字符串必须匹配正则表达式 | @Pattern(regexp="^[A-Za-z0-9]+$") String id; |
@Email | 字符串必须是邮箱格式(Hibernate 扩展) | @Email String email; |
6. 布尔值检查
注解 | 作用 | 示例 |
---|
@AssertTrue | 字段必须为 true | @AssertTrue boolean isAgreed; |
@AssertFalse | 字段必须为 false | @AssertFalse boolean isExpired; |
7. 自定义校验
注解 | 作用 | 示例 |
---|
@CustomAnnotation | 自定义校验逻辑(需实现 ConstraintValidator ) | 需结合 @Constraint 定义,例如:
@Constraint(validatedBy = MyValidator.class) |
8. 其他校验
注解 | 作用 | 示例 |
---|
@Valid | 级联校验(校验对象内的字段) | @Valid @RequestBody User user; |
@CreditCardNumber | Hibernate 扩展,校验信用卡号格式 | @CreditCardNumber String cardNumber; |
@URL | Hibernate 扩展,校验 URL 格式 | @URL String website; |
使用示例
在实体类中添加注解:
public class User {
@NotBlank(message = "用户名不能为空")
private String username;
@Email(message = "邮箱格式错误")
private String email;
@Size(min = 6, max = 16, message = "密码长度需在6-16位之间")
private String password;
}
在 Controller 中触发校验:
@PostMapping("/user")
public ResponseEntity<?> createUser(@Valid @RequestBody User user, BindingResult result) {
if (result.hasErrors()) {
// 处理校验错误
}
// 业务逻辑
}
依赖配置
在 pom.xml
中添加 Hibernate Validator 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
注意事项
- 校验注解需要结合
@Valid
或 @Validated
触发。 - 自定义错误消息可通过
message
属性指定,支持国际化。 - Hibernate Validator 是 Bean Validation 的默认实现,支持更多扩展注解。
评论 (0)