在以下博客条目中。
https://www.baeldung.com/spring-boot-bean-validation
作者提到了 Spring Boot 如何与
@Valid
注解一起工作。
@RestController
public class UserController {
@PostMapping("/users")
ResponseEntity<String> addUser(@Valid @RequestBody User user) {
// persisting the user
return ResponseEntity.ok("User is valid");
}
// standard constructors / other methods
}
当 Spring Boot 发现带有 @Valid 注释的参数时,它会自动引导默认的 JSR 380 实现 — Hibernate Validator — 并验证该参数。
在没有
@Valid
的情况下,@RestController
在 @Validated
上是否能按预期工作?
那么什么样的立体类型需要用
@Validated
显式注释?
是的,
@Valid
无需在@Validated
中使用@RestController
即可工作。
在Spring中,我们在方法级别使用JSR-303的@Valid注解 验证。此外,我们还用它来标记一个成员属性 验证。但是,此注释不支持组验证。 组有助于限制验证期间应用的约束。一 特定的用例是 UI 向导。在这里,第一步,我们可以 具有特定的字段子组。在接下来的步骤中,可能会出现 是属于同一个 bean 的另一个组。因此我们需要申请 每个步骤中对这些有限字段的约束,但 @Valid 没有 支持这一点。在这种情况下,对于组级别,我们必须使用 Spring 的 @Validated,它是 JSR-303 的 @Valid 的变体。这是用的 在方法级别。为了标记成员属性,我们继续 使用@Valid注释。
您可以在此链接中阅读更多相关信息。
遵循通过测试
@RestController
推断出的最低规则:
@Valid
注释,则方法参数被验证。参数类型,即类,本身必须通过一些验证约束来注释,但类上的 @Validated
是不必要的。@Min(1)
等立即验证需要在 @Validated
类本身上添加 @RestController
注释。这很有用,例如为了@PathVariable @Size(min = 1, max = 5) Long[] ids