Как проверить 2 поля с условием ИЛИ?

Я хочу проверить два поля класса запроса таким образом, что либо одно поле действительно, либо другое поле действительно.

Например: запрос компонента

public class CarRequest  {
    @NotEmpty
    private String customerName;
    @NotEmpty
    private String customerId;

Метод контроллера

    public @ResponseBody CarResponse addCar(
            @ModelAttribute @Valid CarRequest request, BindingResult results)
            throws RuntimeException, ValidationException {
        if (results.hasErrors()) {
            LOG.error("error occured while adding the car");
            throw new ValidationException(
                    "Error Occoured while validiating car request");
        }
}

Здесь я хочу проверить, что либо customerName должно быть NotEmpty, либо customerId должно быть NotEmpty. тогда моя проверка должна пройти. Как я могу это реализовать. Пожалуйста, предложите!!


person praveen jain    schedule 25.03.2015    source источник
comment
Для этого вам нужно написать собственный валидатор и привязать его к вашей модели.   -  person Alexander    schedule 25.03.2015
comment
не могли бы вы предоставить ссылку на то же самое?   -  person praveen jain    schedule 25.03.2015


Ответы (1)


Вам нужно создать собственный валидатор для проверки нескольких полей.

создайте пользовательскую аннотацию:

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Documented
@Constraint(validatedBy = CarRequestValidator.class)
@Target({ ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestAnnotation {
    String message() default "{RequestAnnotation}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

создайте собственный валидатор:

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class CarRequestValidator implements 
                ConstraintValidator<RequestAnnotation, CarRequest> {

    @Override
    public void initialize(RequestAnnotation constraintAnnotation) {

    }

    @Override
    public boolean isValid(CarRequest value, ConstraintValidatorContext context) {
        // validation logic goes here
        return false;
    }
}

Теперь добавьте к своей модели пользовательскую аннотацию:

@RequestAnnotation 
public class CarRequest  {
    private String customerName;
    private String customerId;
}
person Mithun    schedule 25.03.2015