springmvc中@valid与@validated的区别是什么
Spring MVC 是一个 web 框架,它提供了处理 HTTP 请求的一系列类和注解,包括 @RequestMapping、@ModelAttribute、@RequestBody 等。除了这些通用的注解外,Spring MVC 还提供了一些验证注解,比如 @Valid 和 @Validated,可以用来对请求参数进行验证。
@Validated 是 Spring 提供的注解,@Valid 是 Java 标准的注解。二者的作用都是用来验证方法参数、方法返回值或类的属性。它们的作用相同,但是有一些区别。
1. 校验失败消息的产生方式不同
@Validated 和 @Valid 在校验失败时的消息产生方式不同。
在 @Validated 中,如果校验失败,则会自动抛出 ConstraintViolationException 异常,然后再由 Spring MVC 捕获该异常,并按照异常处理流程进行处理。在处理异常时,Spring MVC 会将出错时的消息放到 BindingResult 中,然后返回到前端界面。
而在 @Valid 中,如果校验失败,则会将校验信息存储在 BindingResult 中,然后再将视图解析器返回给前端。这样的话,我们需要在前端代码中进行判断并展示错误信息。
2. 校验分组不同
@Valid 和 @Validated 的校验分组是不同的。
@Valid 的分组是根据 javax.validation.groups.Default 来设置的,如果没有指定分组,则使用默认的分组进行验证。
@Validated 支持 JSR-303 验证标准规范(JSR-303)中所定义的分组校验功能,可以通过 @Validated(value={Group1.class, Group2.class}) 来指定校验分组。
3. 支持的校验注解不同
@Valid 和 @Validated 支持的校验注解是有一定区别的。
@Valid 支持 JSR-303 验证标准规范(JSR-303)中定义的所有注解。
@Validated 支持 JSR-303 验证标准规范(JSR-303)中定义的少部分注解,比如 @NotNull、@Size、@Min、@Max、@DecimalMin、@DecimalMax 等。但是,@Validated 还支持 Spring 提供的注解,比如 @Email、@Range、@Pattern、@NotEmpty、@NotBlank 等。
总结:
@Valid 和 @Validated 的作用相同,都是用来验证方法参数、方法返回值或类的属性。
在校验失败时的消息产生方式不同。
@Valid 和 @Validated 的校验分组不同。
@Valid 支持 JSR-303 验证标准规范(JSR-303)中定义的所有注解,@Validated 支持 JSR-303 验证标准规范(JSR-303)中定义的少部分注解,但是,@Validated 还支持 Spring 提供的注解。
