我将向您展示一些代码,然后问一个问题。
AccountValidator.java
package com.goode.validator;
import com.goode.business.Account;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
@Component
public class AccountValidator implements Validator {
@Override
public boolean supports(Class clazz) {
return Account.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
Account account = (Account) target;
if(account.getUsername() == null || account.getUsername().isEmpty()) {
errors.rejectValue("username", "empty username");
}
}
public void validateId(Object target, Errors errors) {
Account account = (Account) target;
if(account.getId() == 1) {
errors.rejectValue("id", "bad ID");
}
}
}
AccountController.java
@RestController
@RequestMapping("/account")
public class AccountController extends BaseController<Account, AccountService> {
@Autowired
private AccountService accountService;
@Autowired
private AccountValidator accountValidator;
@InitBinder
protected void initBinder(final WebDataBinder binder)
{
binder.addValidators(accountValidator);
}
@PostMapping("/register")
public ResponseEntity<?> register(HttpServletRequest request, @Validated(Account.ValidationStepOne.class) @RequestBody Account account, BindingResult result) {
super.initializeService(accountService);
//accountValidator.validateId(account, result);
if(result.hasErrors()){
return ErrorMessage.send(result.getFieldError().getCode(), HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(null, HttpStatus.OK);
}
在 Account.java 中,我有一些验证器,例如@NotNull-> @Validate为我检查字段->完美。 但是现在我想添加一些自定义验证器,因此我创建了 AccountValidator ,然后对 validate 方法进行了一些验证,并创建了@InitBinder->如果 username 为空或为空,此结果将向我显示错误->效果很好。 但是我创建了另一个验证方法- validateId 。如果我取消注释此行:
accountValidator.validateId(account, result);
验证器会很好地工作,结果将显示错误,但是可以使用@InitBinder进行某些操作来避免使用 validateId 方法吗?我想像验证方法一样自动调用 validateId 。有可能吗?
程序员的快乐日。
答案 0 :(得分:0)
如果您想自动启用validateId,则应在validate方法内调用validateId。
@Override
public void validate(Object target, Errors errors) {
Account account = (Account) target;
if(account.getUsername() == null || account.getUsername().isEmpty()) {
errors.rejectValue("username", "empty username");
}
validateId(account, errors);
}