Я покажу вам код, а затем задам вопрос.
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 -> if username пусто или null это результат покажет мне ошибку -> это работает хорошо.
Но я создал другой метод проверки - validateId . Если я раскомментирую эту строку:
accountValidator.validateId(account, result);
валидатор будет работать хорошо, и результат покажет ошибку, но возможно ли что-то сделать с @InitBinder, чтобы избежать использования validateId метода? Я хотел бы вызвать validateId автоматически как метод validate. Возможно ли это?
С Днем Программиста.