validation
validation框架用于解决Java bean 验证的问题,比较常用的场景就是Controller 验证前端传过来的参数是否符合预期,一些比较常用的注解:
@NotNull
@Null
@NotBlank
@Max
@Min
@Pattern
问题场景
在开发过程中遇到一个问题,validation注解对Controller 传参进行验证,但是对象比较复杂包了好几层,所以出现有些字段可以验证,有些字段无法验证的情况。\
传入参数概览
对象的情况是一个数组对象,对象中又存入两个对象,情况如下:
遇到的问题
list中CMSApprovalReq对象中的字段是可以通过注解进行对应的限制,但CtpAffarReq中和另外一个对象中的字段就算加入了对应的注解没有启用,直接通过了验证到达了后台。 Controller代码如下:
解决问题
百度的很多方法都是牛头不对马嘴,最后是通过 @Validated 注解和 @Valid注解解决。
@Validated
@Validated提供了一个分组功能,可以在入参验证时,根据不同采用不同的验证机制,可以用在类、方法、方法参数上,但不能直接用于成员变量上。
@Valid
Valid 注解用于验证是否符合要求,可以直接加在方法、构造函数、方法参数和成员属性上,在变量中添加验证的要求,当不符合要求时就会返回配置好的 message 信息提示错误。
如配置一个**@Notnull**,设置message 信息为字段不能为空,当传入的字段为空时就会提示该信息。
解决
使用 @Validated 把整个Controller 看作一个分组,然后所有需要验证的参数前都加 @Valid 使其配置的验证注解得以生效。
最重要一点就是在CmsApprovalReq对象中包含的对象也加上 @Valid 再使其内部的验证规则生效,代码情况如下。