JSR 303 Различные правила для объекта на основе экземпляров - PullRequest
0 голосов
/ 08 марта 2012

Я посмотрел в Интернете, но не смог найти ни одного примера на JSR 303. Это решило бы мою проблему.

Предположим, у вас есть следующие классы (этот дизайн нельзя изменить!):

Человек, у которого есть место жительства и адрес для переписки, представлен следующим образом:

public class Person {

    private Address domicile = null;
    private Address correspondence = null;


    public Address getDomicile() {
        return domicile;
    }

    public void setDomicile(final Address domicile) {
        this.domicile = domicile;
    }

    public Address getCorrespondence() {
       return correspondence;
    }

    public void setCorrespondence(final Address correspondence) {
      this.correspondence = correspondence;
    }

}

public class Address {

  private String streetName = null;

  public String getStreetName() {
    return streetName;
  }

 public void setStreetName(final String streetName) {
    this.streetName = streetName;
 }

}

Как я могу реализовать, используя подход JSR 303, правило, гласящее, что streetName не должно быть пустым, если оно относится к месту проживанияадрес?

Например, при выполнении проверки, подобной этой, я должен получить ошибку проверки (улица для адреса места жительства равна нулю):

Person p = new Person();

Address a = new Address();
a.setStreetName("some street");
p.setCorrespondence(a);

a = new Address();
p.setDomicile(a);

validator.validate(p);

Валидатор вызывается для компонента bean.В соответствии с этой схемой, я думаю, что я должен определить некоторую аннотацию для 2 экземпляров адресов (в классе Person) и в некоторых случаях, как эта информация должна передаваться в какое-то ограничение, определенное в самом поле streetName (например, NotBlank), но я нене знаю, как это сделать.

Я знаю методику групп JSR 303, но она не соответствует моим специальным требованиям.

1 Ответ

0 голосов
/ 20 мая 2012

Решением будет написать пользовательский валидатор, который будет применяться на уровне класса Person.

@ValidateAddress
public class Person {

    private Address domicile = null;
    private Address correspondence = null;

    //....
}

Такой валидатор будет иметь доступ к обоим полям и может проверять то, что не является нулевым.

...