2013-07-10 1 views
3

Я занимаюсь анализом проверки Java.Проверка объектов Java по полю

Мне нужно создать модуль, который проверяет объект [график] по каждому полю, используя аннотацию и поддерживая пользовательские аннотации, управляемые доменом. Самый важный аспект заключается в том, что недействительный объект не должен быть отклонен (например, лежащим в основе уровня сохранения), но вместо этого отмечен как недействительный.

Например, выберите класс с рядом атрибутов. Если какой-либо недопустимый (например, отсутствует или плохо оценен), я хочу знать, какой из них и пометить в другом месте как недействительный. Важно, чтобы я получил имя все поля, которые не прошли проверку, независимо от того, является ли это примитивным полем или дочерним объектом с проблемой проверки.

Я принял взглянуть на javax.validation, но я не мог понять роль ConstraintViolation: она возвращается валидатор, когда ошибка проверки обнаруживается, но AFAIK не показывает имя поля для сбора.

Вопрос: есть ли у вас какой-либо пример использования javax.validation, который отображает список имен полей, которые признаны недействительными для каждого проверенного компонента?

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

ответ

4

Если вы хотите, чтобы имя элемента, вызвавшего ConstraintViolation вы должны использовать

Path path = ConstraintViolation.getPropertyPath(); 
// a path is an iterable of Path.Node objects 
// the last node element in the path is the element that caused the violation 
// You can get it's name via 
Path.Node node = ...; 
node.getName(); 

Посмотрите на JSR-303 spec главе 4.2 Подробные сведения о Пути.