Как я могу сделать проверку бинов с помощью весенних репозиториев? - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь использовать мой интерфейс репозитория выглядит следующим образом.

interface SomeRepository extends JpaRepository<Some, Long> {

   @org.springframework.lang.Nullable
   Some findByKey(
            @org.springframework.lang.NonNull
            @javax.validation.constraint.NotNull
            final String key);
}

И я обнаружил, что эти ограничения не работают должным образом.

@Test
void findByKeyWithNullKey() {
    repository.findByKey(null);
}

Тестовый пример простопроходит.

Как я могу заставить его работать?

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Согласно Spring JPA документ :

Чтобы включить проверку во время выполнения ограничений обнуляемости для методов запросов, необходимо активировать ненулевое значение на уровне пакета с помощью Spring * @NonNullApi.

Вы можете добавить аннотации пакетов, просто создав файл package-info.java и добавив объявление пакета, к которому оно относится, в файле. Затем добавьте эту аннотацию в ваш пакет следующим образом:

@org.springframework.lang.NonNullApi
package com.example;
0 голосов
/ 12 февраля 2019

Работает, как вы вставили код. Конечно, вам нужно использовать @Repository в репозитории и удалить @ javax.validation.constraint.NotNull, поскольку это не то, что вам нужно. Кроме того, вы должны убедиться, что у вас есть правильный импорт в POM. Я бы порекомендовал сделать наоборот, добавив ненулевой API на уровне пакета, затем:

Rule findOneByExpression(@Nullable String expression);
ruleRepository.findOneByExpression(null);

И увидеть, что он потерпит неудачу, если он возвращает ноль. Затем измените это так:

@Nullable 
Rule findOneByExpression(@Nullable String expression);

И это пройдет.

0 голосов
/ 17 сентября 2018

Я бы предложил использовать валидацию javax в вашей среде Spring и предположить, что если вы используете maven, вам просто нужно включить ниже зависимость

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

после этого, пожалуйста, попробуйте ниже код

Some findByKey(
            @NotNull final String key);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...