[事故笔记]Springboot中@Valid注解无效的一种情况

Scroll Down

最近在做的后端业务中有用到@Valid进行表单验证的需求
所以研究了一下
但是在Controller接口的RequestBody中加上@Valid无论如何都没有办法校验
Controller:

    @PostMapping("/reg")
    public ResultBean reg(
        @Valid @RequestBody RegBO  regBO
    ){
        //TODO do something.....
        return ResultBean.success();
    }

RegBO:

@Data
public class RegBO implements Serializable{
    private static final long serialVersionUID = -8836644929813047906L;
    
    @Size(min=5,max=32,message = "用户名长度在5-32个字符之间哦")
    private String username;

    @Pattern(regexp = "^[a-zA-Z0-9_]{6,32}$",message = "密码长度在6-32个字符之间哦,包含大小写字母数字和下划线")
    private String password;
    
}

很简单,但是没有效果,百度了很久依然没有解决方案。。。
然后尝试Google了一下
在第一条Stack Overflow的回答下找到了:
https://stackoverflow.com/questions/48614773/spring-boot-validation-annotations-valid-and-notblank-not-working

我的Springboot版本也是2.3.0
添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

然后就解决了

原因

因为在早期版本的Springboot中 javax.validation是可以单独使用的,不仅提供了JSR规范,也提供了实现,所以可以用。
而在2.3.0中并没有提供实现,所以需要加入上面的依赖来保证valid可以工作