Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / проблема с @GroupSequenceProvider / Hibernate Validator/ BeanValidation / 1 сообщений из 1, страница 1 из 1
26.01.2014, 16:52
    #38538314
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с @GroupSequenceProvider / Hibernate Validator/ BeanValidation
Например, есть простой класс

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Person {

@NotNull(groups = {PartlyCheck.class})
private String name;

@NotNull(groups = {FullCheck.class})
private String adress;

private boolean isFullCheck;

}



Интерфейсы валидации

Код: java
1.
2.
public interface PartlyCheck{}
public interface FullCheck extends PartlyCheck{}



Хочется понять, почему возникает разница между двумя подходами к проверке.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    if(person.isFullCheck) {

      validator.validate(person, FullCheck.class);

    else {

       validator.validate(person, PartlyCheck.class);
  }




Если isFullCheck=true используются обе проверки (FullCheck.class и PartlyCheck.class).
Если isFullCheck=false используется только PartlyCheck.class.
Все в соответствии с документацией.

Теперь второй вариант с использованием @GroupSequenceProvider(PersonGroupSequenceProvider.class).

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    @GroupSequenceProvider(PersonGroupSequenceProvider.class)

   //...

    @Override
    public List<Class<?>> getValidationGroups(Person person) {                

       List<Class<?>> defaultGroupSequence = new ArrayList<>();
       defaultGroupSequence.add(Person.class);                    


        if (person.isFullCheck) {                                
            defaultGroupSequence.add(FullCheck.class);
        } else {                                
            defaultGroupSequence.add(PartlyCheck.class);
        }       


       return defaultGroupSequence;
   }


Поведение изменилось.

Если isFullCheck=true используется только FullCheck.class.
Почему в этом случае не учитывается что FullCheck расширяет PartlyCheck?

Если isFullCheck=false используется только PartlyCheck.class. Все осталось также.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / проблема с @GroupSequenceProvider / Hibernate Validator/ BeanValidation / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]