@GroupSequenceProvider 配置
作用域只在单个对象的字段里
@Data
@GroupSequenceProvider(value = TestProvider.class)
public class TestRO {
@NotNull(message = "不能为空",groups = ValidatedRemark.A.class)
@Pattern(regexp ="2|3|",message = "只能为2,3,空",groups = ValidatedRemark.B.class)
private String str;
控制层
@PostMapping("/test")
@ApiOperation("测试请求")
public AjaxResult test(@RequestBody @Validated TestRO ro){
根据字段的值分配校验的顺序
import java.util.ArrayList;
import java.util.List;
public class TestProvider implements DefaultGroupSequenceProvider<TestRO> {
@Override
public List<Class<?>> getValidationGroups(TestRO ro) {
List<Class<?>> defaultGroupSequence = new ArrayList<>();
defaultGroupSequence.add(TestRO.class);
if (null==ro) {
return defaultGroupSequence;
}
String xxxType = ro.getXxx();
//判断的业务逻辑
if (ro != null && StringUtils.isNotEmpty(xxxType ) ) {
if (“A”.equals(xxxType )) {
defaultGroupSequence.add(ValidatedRemark.A.class);
}else if(“B”.equals(xxxType )){
defaultGroupSequence.add(ValidatedRemark.B.class);
}
}
return defaultGroupSequence;
}
}
注意事项
如果还包含其他对象,需要对每个对象都加上 @GroupSequenceProvider 和对应的 Provider类
可以加上AOP 把要判断的字段值赋 传递给 包含的其他对象
也可以对这个字段加上必填校验,让前端传值
也可以前面加上非空判断,包含其他对象的对应的 Provider类里加上非空判断就走 分组校验
@Valid
@NotNull(message = "ddd不能为空",groups = ValidatedRemark.A.class)
private Dddd ddd;
@NotNull(message = "list不能为空",groups = ValidatedRemark.A.class)
@Size(min = 1,message = "list里至少一个对象",groups = ValidatedRemark.A.class)
private List<@Valid Cccc> ccccList;
官网