可以用标记接口来分组校验
例如,对于program对象中的成员需要进行验证,但如果是空值,不进行验证
public AjaxResult add(@RequestBody @Validated(value = {ValidationGroup.class}) ProgramDto program)
定义了一个名为 ValidationGroup 的接口。该接口没有任何方法或属性,它仅用于作为一个标记接口(marker interface)来分组校验规则。
public interface ValidationGroup {
}
在program中需要校验的成员上加上@NotBlank(message = “一级指标点id不能为空”,groups = {ValidationGroup.class}),在上一级的类上加上@Valid
public class ProgramDto {
@Valid
private List<GraduateAttribute> graduateAttributes;
}
/**
* 一级指标点
* @author hua
*/
@Data
public class GraduateAttribute {
@ApiModelProperty(value = "id",example = "01,表示1")
@NotBlank(message = "一级指标点id不能为空",groups = {ValidationGroup.class})
private String id;
@ApiModelProperty(value = "序号",example = "01,表示1")
private String serialNum;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "描述")
private String description;
@ApiModelProperty(value = "达成度")
private BigDecimal achievement;
@ApiModelProperty(value = "第二级毕业要求指标点")
@Valid
List<ProgramIndicator> programIndicators;
}
/**
* 培养计划二级指标点
* @author hua
*/
@Data
public class ProgramIndicator {
@ApiModelProperty(value = "id",example = "0101,表示1.1")
@NotBlank(message = "二级指标点id不能为空",groups = {ValidationGroup.class})
private String id;
@ApiModelProperty(value = "序号",example = "1.1")
private String serialNum;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "描述")
private String description;
@ApiModelProperty(value = "达成度")
private BigDecimal achievement;
@ApiModelProperty(value = "支撑课程")
private List<CoreBaseCourse> coreBaseCourses;
}