首页 > 解决方案 > @Valid 在@RestController 上没有@Validated 是否可以工作?

问题描述

在以下博客条目中。

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呢?

标签: springspring-bootbean-validation

解决方案


Yes@Valid可以在没有@Validatedin 的情况下工作@RestController

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

您可以在此链接中阅读有关此内容的更多信息。


推荐阅读