1

У меня есть приложение 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. Есть ли способ сделать оба метода вместе.

ответ

Смежные вопросы