Хобрук: Ваш путь к мастерству в программировании

Проверка параметров метода с помощью JSR-303

Предназначен ли JSR-303 также для проверки параметров метода?

Если да, то есть ли примеры в сети? Самая большая проблема, с которой я сталкиваюсь, это как получить валидатор в каждом методе. Не означает ли это, что с Spring 3 мне придется внедрять практически каждый класс с помощью LocalValidatorFactoryBean?

Спасибо!


Ответы:


1

Это звучит как вариант использования АОП (AspectJ). Напишите pointcut для методов с аннотацией javax.validation.constraints.*, внедрите валидатор в аспект (возможно, используя Spring) и используйте совет @Before или @Around для выполнения проверки перед выполнением метода.

Прочитайте AspectJ в действии для справки.

13.12.2010

2

Проверка на уровне метода будет поддерживаться в следующей версии 4.2 эталонной реализации JSR 303 Hibernate Validator.

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

Обратите внимание, что HV будет иметь дело только с фактической проверкой вызовов методов, а не с запуском такой проверки. Вызов проверки может быть выполнен с использованием АОП или других средств перехвата методов, таких как динамические прокси JDK.

Проблема JIRA для этого — HV-347 [1], поэтому вы можете добавить себя в качестве наблюдателя за этой проблемой.

[1] http://opensource.atlassian.com/projects/hibernate/browse/HV-347

09.01.2011
  • Я думаю, что ваш пост в блоге дополняет ваш ответ;) musingsofaprogrammingaddict.blogspot ком/2011/01/ 27.01.2011
  • Гуннар был достаточно любезен, чтобы разместить свое решение на GitHub. Отлично сработало для меня. 14.10.2011

  • 3

    javadocs для каждого JSR 303 аннотации говорят следующее:

    @Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
    

    Видишь, PARAMETER там. Так что да, это технически возможно.

    Вот пример:

    public void method(@NotNull String parameter) {
        // ...
    }
    

    Однако я не уверен, как это интегрируется с Spring, поскольку я его не использую. Вы можете просто попробовать.

    13.12.2010

    4

    В Spring 3.1.0 вы можете использовать аннотацию @Validated для активации проверки на pojo. Создайте интерфейс для класса pojo и поместите эту аннотацию поверх него, затем добавьте свои аннотации проверки в определениях методов. (интерфейс необходим, потому что Spring создаст прокси-класс, используя интерфейс в качестве определения)

    @Validated
    public interface PojoClass  {
        public @NotNull String doSomething(@NotEmpty String input);
    }
    

    ваш поджо:

    public class PojoClassImpl implements PojoClass {
        public String doSomething(String input) {
            return "";
        }
    }
    

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

    <bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>
    
    16.05.2013
  • По какой-то странной причине ConstraintViolationException public \@NotNull String doSomething(); не сработало, но \@NotNull public String doSomething(); сделал. Использовал полосу, чтобы избежать символа At, который С.О спутал с пользователем. 18.04.2016

  • 5

    Вы можете использовать jcabi-aspects (я разработчик), который интегрирует JSR 303 с Аспект Дж. Фактическая проверка выполняется одной из реализаций JSR 303, которую вам нужно будет добавить в путь к классу, например Hibernate Validator или Apache BVal.

    15.03.2013
    Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..