【问题标题】:Spring boot: @Valid not working with @RequestHeader春季启动:@Valid 不适用于 @RequestHeader
【发布时间】:2020-07-10 09:55:54
【问题描述】:

我真的很难将@Valid@RequestHeader 结合起来。 这可能不受支持,还是有办法启用它?我找不到有用的信息...

当我用@Validated 注释整个控制器时,它可以工作,所以这不是一个大问题。但是,我觉得它也应该与 @Valid 一起使用,所以我想知道我是否在这里遗漏了什么。

代码示例:

    @GetMapping("/validationControllerHeader")
    public String validationControllerHeader(@Valid @RequestHeader @Pattern(regexp = "[a-z]{3}[0-9]+") String someheader) {
        return someheader;
    }

我也在同一个测试控制器中使用@Valid 进行查询参数和正文验证,并且它在那里工作,所以问题只存在于标题中。

使用spring boot 2.3.1.RELEASE

【问题讨论】:

    标签: spring-boot validation


    【解决方案1】:

    你绝对应该在你的控制器类中使用@Validated,因为它表明验证是在那个类中执行的。来自documentation

    要符合 Spring 驱动的方法验证条件,所有目标类都需要使用 Spring 的 @Validated 注释进行注释,该注释还可以选择声明要使用的验证组。

    而且,由于您使用的是@Pattern(这是一个 Bean 验证注解),因此您不需要 @Valid

    【讨论】:

    • 感谢您的快速回复。然后我想知道为什么不在类型级别上验证但参数上的验证适用于RequestParameter和RequestBody,但不适用于RequestHeader。我同意 Validated 是更好的方法,但我目前正在为我们的微服务开发一个内部库,而且我知道并非所有开发人员都在其微服务中的类型级别上使用它。想让东西防水;)
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2015-04-18
    • 2017-06-24
    相关资源
    最近更新 更多