Пользовательская аннотация проверки Java - PullRequest
0 голосов
/ 15 мая 2018
    public class Student{
    @NotNull
    private Course course= null;

    @CustomValidation(enumCourse = course)
    private String details = null;
    }
}

Как передать переменную курса в аннотацию CustomValidation?Я получаю сообщение об ошибке, говорящее, что курс должен быть константным выражением перечисления.

Я также написал пользовательский интерфейс проверки и валидатор.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Это определено в разделе 9.6.1 JLS. Типы элементов аннотации должны быть одного из:

примитив строка Учебный класс Enum другая аннотация массив любого из вышеперечисленных

Курс должен быть одним из этих типов.

0 голосов
/ 15 мая 2018

Свойство аннотации должно быть постоянным во время компиляции.

Вы не можете использовать переменную там.

Ключевое слово здесь cross fields validation.

У вас есть два варианта:

  1. Создание аннотации на уровне класса. Там у вас есть доступ ко всем свойствам класса и проверка должна быть сделана легко
  2. Или создайте аннотацию на уровне метода, которая возвращает все необходимые поля для проверки.

    @CustomAnnotations
    Pair<Course, String> getCourseAndDetailForValidation() {
       return Pair.of(course, details)
    }
    

    Вы можете изменить тип возвращаемого значения по своему вкусу, это может быть List, Array, объекты-обёртки ...

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