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分組)。它們屬於不同分組。校驗的時候選擇不同分組,只會校驗選擇的分組的字段。
詳解版參考:https://www.cnblogs.com/super-chao/p/15314566.html