今天在开发中遇到一个@Valid注解未生效的问题,在网上搜寻了一圈都没有找到有效的解决方法,所以在此记录一下给遇到相同问题着提供参考。
代码如下,在类UserReqVO中有个内部类UserTest,下面有一个字段idNo想要校验该字段的长度所以使用了注解@Size(max = 10)。
@RestController
public class TestController {
@PostMapping(value = "/aa")
public void bigDataExport(@Valid @RequestBody UserReqVO userReqVO) throws IOException {
System.out.println(userReqVO.toString());
}
@Data
public static class UserReqVO {
@Size(max = 10) //该注解已起效且可以正常校验
private String no;
private List<UserTest> userTestList;
@Data
public static class UserTest implements Serializable {
@Size(max = 10) //此时该注解并没有起效
private String idNo;
}
}
}
但是实际运行发现该注解并没有起效!!!
然后就看这个注解是不是加的位置有问题,或者说是少加了什么注解一个一个的尝试和探索。
然后我们把@Valid注解加在内部类上面,还是未起效。
最后搜索了解到要加在内部类的getter方法上,果然就可以了
所以使用Lombok的@Data注解后直接将@Valid注解加在声明内部类这里即可生效!
注意下面代码中@Valid注解的位置!!!
@RestController
public class TestController {
@PostMapping(value = "/aa")
public void bigDataExport(@Valid @RequestBody UserReqVO userReqVO) throws IOException {
System.out.println(userReqVO.toString());
}
@Data
public static class UserReqVO {
@Size(max = 10)
private String no;
@Valid//注意在内部类的声明这里就需要加上@Valid,这样内部类里面的@Size才会起效
private List<UserTest> userTestList;
@Data
public static class UserTest implements Serializable {
@Size(max = 10)
private String idNo;
}
}
}