javax.validation注解校验:我们使用的实体,有时候需要全部校验它的字段,有时候其他地方使用只需要校验它的部分字段。

解决办法:使用分组校验。



/**
* 用户名
*/
@NotBlank(message = "用户名不能为空!",groups = Group.AddGroup.class)
private String userName;

/**
* 密码
*/
@NotBlank(message = "密码不能为空!")
private String password;


1.新增的时候我需要全部校验字段(userName,password都校验):



@RequestBody @Validated({Default.class, Group.AddGroup.class}) UserEntity userEntity, BindingResult bindingResult


或者



private BaseResponse validateParam(UserEntity userEntity) {
List<String> validateError = ValidationUtil.validate(userEntity, Default.class, Group.AddGroup.class);//Default.class, Group.AddGroup.class
if (validateError != null && validateError.size() > 0) { // validateError.get(0)
return BaseResponse.failedCustom(validateError.get(0)).build();
}
return BaseResponse.successCustom().build();
}


2.其他地方使用我只需要校验部分字段(只校验password字段,属于默认分组Default):



@RequestBody @Validated({Default.class}) UserEntity userEntity, BindingResult bindingResult


或者



private BaseResponse validateParam(UserEntity userEntity) {
List<String> validateError = ValidationUtil.validate(userEntity, Default.class);//Default.class, Group.AddGroup.class
if (validateError != null && validateError.size() > 0) { // validateError.get(0)
return BaseResponse.failedCustom(validateError.get(0)).build();
}
return BaseResponse.successCustom().build();
}


3.只校验userName字段,属于分组AddGroup:



@RequestBody @Validated({Group.AddGroup.class}) UserEntity userEntity, BindingResult bindingResult


或者



private BaseResponse validateParam(UserEntity userEntity) {
List<String> validateError = ValidationUtil.validate(userEntity,Group.AddGroup.class);//Default.class, Group.AddGroup.class
if (validateError != null && validateError.size() > 0) { // validateError.get(0)
return BaseResponse.failedCustom(validateError.get(0)).build();
}
return BaseResponse.successCustom().build();
}


userName属于AddGroup分组,password属于Default默认分组(没有添加自定义分组的字段都默认为Default分组)。它们属于不同分组。校验的时候选择不同分组,只会校验选择的分组的字段。