У меня есть приложение REST для весны, и я хочу использовать аннотации @Valid для украшения полей bean-полей, которые могут быть проверены для простых проверок @NotNull.Spring Rest Validation с помощью @Valid и @InitBinder вместе
public ResponseEntity<ExtAuthInquiryResponse> performExtAuthInq(@Valid @RequestBody ExtAuthInquiryRequest extAuthInquiryRequest)
как этот
@NotBlank(message = "requestUniqueId cannot be blank..")
private String requestUniqueId;
В дополнение к этому я хочу использовать @initBinder для выполнения более сложных проверок (например, на основе стоимости одного месторождения второе поле является обязательным)
@InitBinder("extAuthInquiryRequest")
protected void initExtAuthInqRequestBinder(WebDataBinder binder) {
binder.setValidator(extAuthInqValidator);
}
Реализация валидатора (только для условных случаев проверки)
@Override
public void validate(Object target, Errors e) {
ExtAuthInquiryRequest p = (ExtAuthInquiryRequest) target;
// Dont want to do this check here. Can be simply done in the bean using @NotNull checks
ValidationUtils.rejectIfEmpty(e, "requestUniqueId", "requestUniqueId is empty");
// this is a good candidate to be validated here
if(StringUtils.isNotBlank(p.getPersonInfo().getContactInfo().getPhoneNumber().getPhoneType())){
if(StringUtils.isBlank(p.getPersonInfo().getContactInfo().getPhoneNumber().getPhoneNumber())){
e.rejectValue("personInfo.contactInfo.phoneNumber.phoneNumber", "phoneNumber is mandatory when phoneType is provided");
}
}
}
}
Я видел множество примеров онлайн, которые используют либо тот или иной. Я попытался сделать оба подхода вместе, но когда у меня установлена @initBinder, аннотации @valid на объекте запроса больше не выполняются.
Потому что я не хочу писать код в классе весового валидатора для простых проверок @NotNull. Есть ли способ сделать оба метода вместе.