@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> {@Overridepublic 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;