今天碰到了校验没有生效的问题,百思不得其解,网上也搜不到,因为网上的基本都是说导包不对、依赖没有添加之类的。我是因为曾经的项目都是对的,直接复制过来的,就想不通为什么不行。
以下是我本次解决问题的思路。
第一,怀疑导包和依赖不对,导致项目的校验组件没有生效
但实际都添加了,和其他有效的项目反复对比,没有出入,所以这块儿没有问题。
第二步,发现本项目中另外有个controller的校验组件是生效的,怀疑是什么玄学问题,重新建了controller,依然无效,然后在新的controller中调用的生效的参数dto,校验生效了。
反复对比后发现,生效的参数dto也只有字符串类型的生效了,原未生效的参数dto中也只有整型的没有生效,没有生效校验的controller正好只有整型的校验。于是接下来排查就有方向了
我用到了@Min这个注解,但是我属性类是用包装类定义的,此时参数未传入,因此参数为null,无法进行最小值的判断,所以校验失效。
改为基本数据类型int后,参数没有传也不会为null,而是为0,就可以进行min的判断了,Controller中@Valid的校验也生效了。