Проверка Spring REST @RequestBody в определенном порядке и только одно из обязательных полей группы

Допустим, у меня есть ниже bean-компонент, который я получаю в методе ввода моего контроллера, используя @RequestBody

public class MyRequestBean extends RequestBean {

    private static final long serialVersionUID = 1L;

    private String lastName ;
    private String firstName ;
    private String ssnNumber;
    private String groupCd;

}

Я поставил @Valid в методе точки входа рядом с - @RequestBody.

Я пытаюсь достичь двух вещей,

  1. ssnNumber является абсолютно обязательным полем — если оно пустое или пустое — нет необходимости проверять что-либо еще. Просто верните сообщение об ошибке.

  2. Если ssnNumber допустимо, проверьте, допустимы ли какие-либо из трех полей — firstName, lastName и groupCd с @NotNull и @NotEmpty. Если какое-либо из полей присутствует, обработайте запрос.

Как я могу этого добиться?

Я использую эти две зависимости для проверки,

<dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
</dependency>

Validation API — 1.1.0.Final, а Hibernate Validator — 5.3.4.Final

EDIT: Возможная повторяющаяся ссылка говорит о порядке полей JSON. В моем случае порядок полей не имеет значения. Речь идет о порядке проверки поля. Я что-то пропустил?


person Sabir Khan    schedule 09.05.2017    source источник
comment
Возможный дубликат Jackson ObjectMapper - укажите порядок сериализации свойств объекта   -  person buræquete    schedule 09.05.2017
comment
Это не дубликат, как порядок полей JSON имеет отношение к запросу проверки bean-компонента? Я что-то пропустил?   -  person Sabir Khan    schedule 09.05.2017


Ответы (1)


Я не нашел способа сделать это с помощью аннотаций, то есть проверки полей заказа с помощью аннотаций.

В конце концов мне пришлось написать свой собственный класс валидатора - MyValidator, реализовав - org.springframework.validation.Validator и написав там свою упорядоченную логику, а затем добавив этот валидатор для этого контроллера в класс контроллера,

@InitBinder
    public void globalInitBinder(WebDataBinder binder) {
        binder.addValidators(new MyValidator());
    }
person Sabir Khan    schedule 31.05.2017