Как проверить целочисленность как ноль или не пустым в JPA? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть несколько целых чисел, которые я проверяю, но они записаны в виде серии операторов if, которые не выполняются в отчете SonarQube. Как вы можете видеть ниже, я хочу проверить, что если (например) канал 0 не является нулевым, а также, если целое число не присутствует в моем хранилище, сопоставьте с некоторым сообщением об ошибке, которое я определил. Я попытался удалить приведенную ниже проверку! = Null и реализовал аннотацию @NullOrNotBlank, определенную в ответе с самым высоким рейтингом, и присвоил ее своему полю, но это работает только для строки, которую я считаю: Java-аннотация для Null, но не пустони Пробел

Когда я включаю любое другое поле, которое не является каналом в тестовом сообщении, я получаю ошибку NullpointerException для поля канала.

Как я могу обновить пользовательскую аннотацию, чтобы включить в проверку целые числа? Или есть более подходящая аннотация, которую я должен использовать? Или, может быть, есть лучший способ написать заявление if?

Пример - "канал": 0,

if (updateCaseDataVO.getChannel() != null
                && !(channelRepository.findById(updateCaseDataVO.getChannel().getChannel()).isPresent())) {
            map.put(ErrorConstants.CHANNEL, ErrorConstants.CHANNEL_ERROR_MESSAGE);
        }

 @ConstraintComposition(CompositionType.OR)
    @Null
    @NotBlank
    @ReportAsSingleViolation
    @Target({ ElementType.FIELD })
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = {})
    public @interface NullOrNotBlank {
String message() default "{org.hibernate.validator.constraints.NullOrNotBlank.message}";

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

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

1 Ответ

0 голосов
/ 05 ноября 2019

Вы можете создать пользовательский валидатор, который использует репозиторий (или любой другой компонент). Вот простая демонстрация , которую я сделал как ответ на аналогичный вопрос.

В качестве альтернативы (если использование сторонней зависимости приемлемо), я бырекомендуем Jakub Jirutka Bean Validator, использующий Spring Expression Language (SpEL) , который допускает такие вещи как:

public class Sample {

    @SpELAssert("@myService.calculate(#this) > 42")
    private int value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...