Spring Rest Validation с использованием @Valid и @InitBinder вместе

У меня есть приложение Spring REST, и я хочу использовать аннотации @Valid для украшения полей bean-компонентов, которые можно проверить для простых проверок @NotNull.

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


person robin bajaj    schedule 02.05.2016    source источник


Ответы (1)


нашел эту ссылку в Интернете spring делегирование в JSR-303 для простой проверки на уровне поля

работает как шарм..

person robin bajaj    schedule 04.05.2016