javax.validation.ConstraintDeclarationException: HV000131. Каскадная проверка в иерархических объектах - PullRequest
0 голосов
/ 19 июня 2019

У меня есть следующая иерархия:

public class A extends B {
   @Valid 
   public A(String languageCode, C token) {
      super(languageCode, token);
   }  
}

У класса B есть код языка вызова свойств, который должен проверяться с помощью @NotEmpty, только если у службы есть @Validated ({RequiringLanguageCode.class})

 public class B extends D {

    private String languageCode;

    @Valid
    public B(String languageCode, C token) {
        super(token);
        this.languageCode = languageCode;
    }

    @NotEmpty(groups = {RequiringLanguageCode.class})
    public String getLanguageCode() {
        return languageCode;
    }
}

Теперь D - это базовый класс, который имеет свойство C, которое должно быть проверено как NotNull, а также значения, которые находятся внутри класса C.

public class D {

    private C token;

    @Valid
    public D(C token) {
        this.token = token;
    }

    @NotNull
    public C getToken() {
        return token;
    }
}

Класс C содержит дваСтрока, которая проверяется как @NotEmpty:

public class C {

    private String value1;

    private String value2;

    public C(String value1,
            String value2) {
        this.value1 = value1;
        this.value2 = value2;
    }

    @NotEmpty
    public String getValue1() {
        return value1;
    }

    @NotEmpty
    public String getValue2() {
        return value2;
    }
}

При попытке проверить это с помощью mockito значения класса C не проверяются, если значения токена (value1 и value2) пусты.

Может ли кто-нибудь мне помочь? Кто-нибудь имеет представление о том, что происходит?

Тест состоит в следующем:

@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("test")
public class ATest {

    @Autowired
    private AAssembler aAssembler;

    @Mock
    A request;

    @Mock
    C token;

    @Test
    public void test() {
        when(token.getValue1()).thenReturn("");
        when(token.getValue2()).thenReturn("key");
        when(request.getToken()).thenReturn(token);
        assertThatIllegalArgumentException()
           .isThrownBy(() -> aAssembler.build(request));
    }
}

AAssembler аннотируется как @Validated ({RequiringLanguageCode.class})

Причина, по которой я запускаю исключение IllegalArgumentException вместо ConstraintViolationException, выходит за рамки этой проблемы.Вместо этого я улавливаю нарушение ограничения и выдает исключение IllegalArgumentException.

Метод сборки Assembler также имеет ограничение, помеченное как:

public Response build(@Valid @NotNull A request) {
....
} 

Я был бы очень благодарен, если кто-нибудь может мне помочь.В любом случае, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...