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