背景,最近同事告知,我写的校验不生效,让排查
1、代码如图
控制器:
请求对象
2、问题
ApplyAsymKeyReq对象的校验没有问题,为何父类BaseReq的appId属性校验不生效?
排查:
1、是否Getter方法或者继承导致的检验不生效?否
2、是否检验器校验前,属性值已被其它业务注入值?否
3、检查代码片段“ groups = AddGrop.class ”对其影响?是
3、 结论:
@Valid默认不对代码片段 "grops = AddGroup.class " 注释的属性进行校验。
4、思考处理方案:
由于同事的写法如下,需要使用groups属性,而默认的@Valid不需要,二者冲突。
故涉及到groups属性去留二选一问题。
于是将结论发送到开发群里,商量最后选择哪一种校验方式。
5、最终处理方案:
放弃ValidatorUtils.validateEntity(req,AddGroup.class)用法,
移除grops = AddGroup.class ,使得@Validated @Valid注解生效。
另外:
由于本项目是微服务,并非单体式的业务密集型应用,分组校验的使用场景并不广泛。
大部分校验,新建DTO即可,亦降低代码维护复杂度。(有任何不同见解欢迎留言)