@NonNull Lombok, вмешивающийся в javax.validation.constraints.NotNull во время проверки - PullRequest
0 голосов
/ 07 января 2019

Аннотация Lombok @NonNull мешает аннотации javax.validation.constraints.NotNull во время проверки в приложении с весенней загрузкой.

Я использую Lombok в своих объектах JPA, чтобы существенно сократить код в них (исключить методы получения и установки, хэш-код и равно, конструкторы и т. Д.). Я использую аннотацию @NonNull для каждого обязательного поля, а затем аннотацию @RequiredArgsConstructor в верхней части класса, чтобы сгенерировать конструктор, принимающий только эти поля (устраняет необходимость отправлять идентификаторы объекта, UUID и наборы «один ко многим» как ноль при создание объекта).

Проблема, с которой я столкнулся, заключается в том, что после добавления Lombok не так давно мое оригинальное сообщение аннотации @NotNull заменяется общим сообщением Lombok для аннотации @NonNull. Взгляните на это поле, например:

@Digits(integer = 5, fraction = 0, message = "The orders port must be a number from 1 to 65 535!")
@NotNull(message = "The orders port is required!")
@Min(value = 1, message = "The orders port must be a number from 1 to 65 535!")
@Max(value = 65535, message = "The orders port must be a number from 1 to 65 535!")
@Column(nullable = false)
@NonNull
private Integer ordersPort;

Когда я ничего не помещаю в это поле, получаю это сообщение:

Property ordersPort threw exception; nested exception is java.lang.NullPointerException: ordersPort is marked @NonNull but is null

До добавления Lombok все работало нормально, и я получал сообщения, которые я разместил выше. Есть ли способ продолжать использовать Lombok, но каким-то образом отключить его от рассмотрения во время проверки?

Спасибо!

1 Ответ

0 голосов
/ 07 января 2019

Поскольку lombok.NonNull будет генерировать оператор if непосредственно в коде, который позже выдает NullPointerException, вы не можете ничего сделать. javax.validation требует, чтобы бин был сконструирован до его проверки, и Lombok предотвратит его.

Вы можете удалить lombok.NonNull или уменьшить его до предупреждения с помощью lombok.nonNull.flagUsage=warning, но это позволит вам создать недопустимые объекты, которые вам придется проверять вручную с помощью javax.validation.

...