Есть ли более простой способ проверки DTO? - PullRequest
0 голосов
/ 08 февраля 2019

В настоящее время я работаю над весенними загрузочными проектами по созданию микро сервисов.Мне нравится идея использования javax.validation.constrainsts.* аннотаций для выполнения простых вещей проверки, таких как проверка NotNull и Size проверок, а затем перехват всех этих ограничений проверки за один раз с использованием javax.validation.Validator.Но если я хочу добавить некоторые пользовательские проверки для некоторых полей, например, если у меня есть поле возраста, и я бы проверил, является ли этот возраст допустимым, если он больше 18, есть ли более простой и чистый способ сделать такие проверки,учитывая, что у меня есть много полей в моем классе.

Глядя на существующую кодовую базу, я вижу, что другие люди написали функцию для каждого из полей, которая будет проверять конкретное поле.Затем вызовите все такие функции из одного места, чтобы получить все ошибки.Казалось, что определенно должен быть более удобный способ, чем этот подход.

Я также знаю, что могу создать свою собственную проверку ограничений javax, создав свои собственные аннотации, которые я узнал из здесь .Есть ли более простой способ сделать это, кроме написания моей собственной аннотации вместе с другим классом, который реализует ConstraintValidator.Кстати, я использую Java 11. Метод функционального программирования тоже подойдет.

У меня появилась идея следовать той же процедуре, что и для создания пользовательской проверки ограничений.Но в аннотации я бы добавил еще одно поле, подобное этому,

@Target({FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = Validator.class)
public @interface Validate {
 // Extra field 
 Function<Object, Boolean> func();

 String message() default "Invalid";

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

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

Так что теперь я должен иметь возможность передать пользовательскую функцию аннотации, могу использовать одну и ту же аннотацию для всех полей, но использовать разныефункции по мере необходимости, например:

@Validate(func = field1Validator)
private String field1;

@Validate(func = field2Validator)
private String field2;

Преимущество этого состоит в том, что я все еще смогу отлавливать все нарушения ограничений в одном.Но проблема здесь в том, что Java не допускает функцию в аннотациях.

Любые и все предложения приветствуются.

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