返回

一键加速SpringBoot参数校验学习!—@Validated与@Valid的区别

后端

Spring Boot 中的参数校验:@Validated 和 @Valid

校验的重要性

在任何编码场景中,参数校验都是至关重要的。它能确保传入的参数有效,避免出现错误或意外行为。Spring Boot 提供了两种参数校验注解:@Validated@Valid,它们让开发人员能够轻松地对方法参数进行校验。

@Validated

@Validated 注解用于方法或类级别,启用参数校验。当应用于方法时,它会在方法执行前校验方法参数。如果校验失败,Spring Boot 会抛出异常。

@Valid

@Valid 注解用于方法参数,启用参数校验。当应用于方法参数时,Spring Boot 会在方法执行前校验该参数。如果校验失败,Spring Boot 会抛出异常。

@Validated 和 @Valid 的区别

@Validated@Valid 的主要区别在于作用域。@Validated 应用于方法或类级别,而 @Valid 应用于方法参数。

此外,@Validated 可与其他校验注解(如 @NotNull@NotBlank@Size)一起使用。当 @Validated 与其他校验注解一起使用时,Spring Boot 会在方法执行前校验方法参数。如果校验失败,Spring Boot 会抛出异常。

使用 @Validated 和 @Valid 的好处

使用 @Validated@Valid 注解有以下好处:

  • 提高代码质量:它们能校验传入的参数,防止出现错误。
  • 提高开发效率:它们减少了编写参数校验代码的时间。
  • 提高代码可维护性:它们使代码更清晰易读。

示例

@PostMapping("/user")
public User createUser(@Valid @RequestBody User user) {
    // ...
}

在此示例中,我们使用 @Valid 注解在方法参数 user 上启用了参数校验。当方法执行前,Spring Boot 会校验 user 参数。如果校验失败,Spring Boot 会抛出异常。

总结

@Validated@Valid 是 Spring Boot 中强大的参数校验注解。通过使用这些注解,开发人员可以提高代码质量、开发效率和可维护性。

常见问题解答

  1. 如何选择使用 @Validated 还是 @Valid

    • 如果需要在方法或类级别启用参数校验,请使用 @Validated
    • 如果需要在方法参数上启用参数校验,请使用 @Valid
  2. 可以在同一个方法中同时使用 @Validated@Valid 吗?

    • 可以。@Validated 适用于方法级别,而 @Valid 适用于参数级别。
  3. 如何自定义参数校验?

    • 可以使用 @Constraint@ConstraintValidator@ConstraintValidatorContext 注解创建自定义校验。
  4. 参数校验失败后,Spring Boot 会抛出什么异常?

    • Spring Boot 会抛出 MethodArgumentNotValidException 异常。
  5. 是否可以禁用 Spring Boot 的参数校验?

    • 可以通过设置 spring.mvc.validatation.enabled=false 来禁用 Spring Boot 的参数校验。