Необязательно, если @NotBlank дает ошибку, тогда как @Size не дает неизменного класса с использованием проверки Javax - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть следующие POJO:

import java.util.Optional;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

import org.immutables.value.Value;

@Value.Immutable
public interface ABC {
    Optional<@NotBlank String> test();

    Optional<@Size(max = 280) String> testSize();
}

Я использую валидацию javax для проверки объектов класса ABC следующим образом:

public static Set<TestConstraintViolation> validateInternalTest(final Object type, final Class<?>... groups) {
        Set<TestConstraintViolation> violations = new HashSet<>();
        for (Method method : type.getClass().getInterfaces()[0].getDeclaredMethods()) {
            try {
                VALIDATOR.validateReturnValue(
                        type,
                        method,
                        method.invoke(type),
                        groups).forEach(constraint -> {
                    TestConstraintViolation testConstraintViolation = new TestConstraintViolation(
                            method.getName(),
                            constraint.getMessageTemplate()
                    );
                    violations.add(testConstraintViolation);
                });
            } catch (IllegalAccessException | InvocationTargetException e) {
                throw new IllegalStateException("", e);
            }
        }
        return violations;
    }

Теперь, когда я пытаюсь проверить с помощью этого валидатораФункциональные объекты ABC, я вижу странную проблему:

@Test
public void test() {
    ABC abc = ABCType.builder().build();
    assertThat(validateInternalTest(abc))
            .hasViolation("test", "{javax.validation.constraints.NotBlank.message}");

    ABC abc2 = ABCType.builder().test("test").build();
    assertThat(validateInternalTest(abc2))
            .hasNoViolations();
}

С объектом abc, он возвращает нарушения, если тест не пройден, даже если он является необязательным, но не пройдя testSize, работает нормально.

По мне, с Optional оба должны работать.Не так ли?

Это какая-то проблема с неизменяемостью или проверкой javax?Пожалуйста, помогите.

1 Ответ

0 голосов
/ 23 сентября 2019

Что такое необязательный тип? Необязательный - это новый тип контейнера, который переносит одно значение, если оно доступно.Таким образом, это означает, что значение может отсутствовать.Возьмем, к примеру, этот метод:

Если вы используете Optional, это означает, что значение может отсутствовать, и использование @NotBlank в сочетании с Optional не кажется мне разумной идеей.

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