如果@RestController上没有@Validated,@Valid是否可以工作?

问题描述 投票:0回答:2

在以下博客条目中。

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
显式注释?

spring spring-boot bean-validation
2个回答
2
投票

是的,

@Valid
无需在
@Validated
中使用
@RestController
即可工作。

在Spring中,我们在方法级别使用JSR-303的@Valid注解 验证。此外,我们还用它来标记一个成员属性 验证。但是,此注释不支持组验证。 组有助于限制验证期间应用的约束。一 特定的用例是 UI 向导。在这里,第一步,我们可以 具有特定的字段子组。在接下来的步骤中,可能会出现 是属于同一个 bean 的另一个组。因此我们需要申请 每个步骤中对这些有限字段的约束,但 @Valid 没有 支持这一点。在这种情况下,对于组级别,我们必须使用 Spring 的 @Validated,它是 JSR-303 的 @Valid 的变体。这是用的 在方法级别。为了标记成员属性,我们继续 使用@Valid注释。

您可以在此链接中阅读更多相关信息。


1
投票

遵循通过测试

@RestController
推断出的最低规则:

  1. 如果方法参数本身存在
    @Valid
    注释,则方法参数被验证。参数类型,即类,本身必须通过一些验证约束来注释,但类上的
    @Validated
    是不必要的。
  2. 方法参数上的
    @Min(1)
    等立即验证需要在
    @Validated
    类本身上添加
    @RestController
    注释。这很有用,例如为了
    @PathVariable @Size(min = 1, max = 5) Long[] ids
© www.soinside.com 2019 - 2024. All rights reserved.