# Java SpringBoot Validation怎么用 ## 目录 - [一、SpringBoot Validation概述](#一springboot-validation概述) - [二、环境准备与基础配置](#二环境准备与基础配置) - [三、核心注解详解](#三核心注解详解) - [四、自定义验证规则](#四自定义验证规则) - [五、分组验证与级联验证](#五分组验证与级联验证) - [六、异常处理与国际化](#六异常处理与国际化) - [七、高级应用场景](#七高级应用场景) - [八、性能优化与最佳实践](#八性能优化与最佳实践) - [九、常见问题排查](#九常见问题排查) - [十、总结与扩展](#十总结与扩展) --- ## 一、SpringBoot Validation概述 ### 1.1 数据验证的重要性 (约800字论述数据校验在Web应用中的关键作用) ### 1.2 Bean Validation规范 ```java // JSR-380规范示例 public class User { @NotBlank private String username; @Email private String email; }
(详细说明spring-boot-starter-validation的自动配置机制)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
# application.yml spring: mvc: validation: enabled: true
(包含10种常见配置项的详细解释)
注解 | 功能说明 | 示例值限制 |
---|---|---|
@NotNull | 非空校验 | 不能为null |
@Size | 集合/字符串大小 | min=2, max=10 |
(完整表格包含25+个内置注解)
@PostMapping public ResponseEntity<?> createUser(@Valid @RequestBody UserDTO user) { // ... }
@Validated public class UserService { @Valid public User createUser(@Valid User user) { // ... } }
@Target({FIELD}) @Retention(RUNTIME) @Constraint(validatedBy = PhoneValidator.class) public @interface Phone { String message() default "Invalid phone number"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
public class PhoneValidator implements ConstraintValidator<Phone, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { return value != null && value.matches("^1[3-9]\\d{9}$"); } }
(包含5种复杂自定义场景的实现)
public interface UpdateGroup {} public interface CreateGroup {} public class User { @Null(groups = CreateGroup.class) @NotNull(groups = UpdateGroup.class) private Long id; }
public class OrderDTO { @Valid private List<@Valid OrderItem> items; }
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ErrorResult handleValidException(MethodArgumentNotValidException e) { // 提取错误信息逻辑... } }
# messages.properties NotBlank.user.name=用户名不能为空 Size.user.password=密码长度需在6-20个字符之间
(使用Hibernate Validator的ScriptAssert)
@Getter @Setter @FieldMatch.List({ @FieldMatch(first = "password", second = "confirmPassword") }) public class RegistrationForm { private String password; private String confirmPassword; }
(不同注解的CPU耗时测试数据)
(多种方式获取错误信息的代码对比)
方案 | 优点 | 缺点 |
---|---|---|
Spring Validation | 声明式编程 | 复杂逻辑支持有限 |
(全文共计约15500字,包含35个代码示例和12个配置说明) “`
注:此为文章结构框架,实际完整内容需要展开每个章节的详细说明,包含: 1. 深度技术原理分析 2. 完整代码示例(Controller/Service/DTO) 3. 各类验证场景的测试用例 4. 性能测试数据图表 5. 常见错误解决方案 6. 企业级应用实践案例
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。