Hibernate Validator不仅可以用于Controller层的参数验证,还可以在Service层、Repository层或任何其他层中使用。
手动验证
在任何地方都可以通过Validator接口手动触发验证:
public class ManualValidationExample {
public void validateObject(Object obj) {
// 获取验证器
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// 执行验证
Set<ConstraintViolation<Object>> violations = validator.validate(obj);
// 处理验证结果
if (!violations.isEmpty()) {
for (ConstraintViolation<Object> violation : violations) {
System.out.println(violation.getPropertyPath() + ": " + violation.getMessage());
}
throw new IllegalArgumentException("Validation failed");
}
}
}
在Service层使用
在方法调用时进行验证,首先在类上添加@Validated注解以启用方法验证
@Service
@Validated
public class UserService {
public void createUser(@NotNull @Valid User user) {
// 业务逻辑
}
public void updateEmail(@Min(1) Long userId, @NotBlank @Email String email) {
// 业务逻辑
}
}
在Entity/DTO中使用
Hibernate Validator可以直接用于任何Java类:
public class Product {
@NotNull
private Long id;
@NotBlank
@Size(max = 100)
private String name;
@Positive
private BigDecimal price;
// getters and setters
}