Проверять ресурсы JAX-RS (Apache Wink) с помощью JSR303? - PullRequest
5 голосов
/ 28 февраля 2012

Можно ли эффективно использовать аннотации JSR303 (Bean Validation) на ресурсах JAX-RS?

Так, например, если у меня есть член ресурса, который я аннотировал @NotEmpty, создайте ошибкуобратно к клиенту, если это ограничение не выполняется?

Это кажется очевидной вещью, которую нужно сделать, но также я рад сообщить о лучших путях (я не хочу переносить проверку вниз в ORM / базу данныхуровень)

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

Вы действительно имеете в виду проверку участников ресурса?Обычно члены ресурса вводятся тем или иным способом (это либо контексты, либо сущности, либо параметры пути / запроса / матрицы), до тех пор, пока работает инфраструктура JAX-RS, вы будете правильно вводить эти члены.

Лично я думаю, что имеет больше смысла проверять сущность, так как она прибыла по проводу, заполненная MessageBodyReader, и в основном вы не знаете, что внутри, верно?

Так что, если вы решитеДля проверки сущностей существует несколько подходов:

  1. AFAIK, Apache Wink не поддерживает встроенные проверки.Вы можете реализовать обработчик.Смотри DeploymentConfiguration.initRequestHandlersChain().Он поддерживает добавление пользовательских обработчиков.В вашем обработчике вы можете выполнять любые проверки.Я даже думаю, что сообщество Wink будет радо, если вы предоставите этот код.
    Единственная проблема с этим подходом - это связано с Apache Wink.Это не сработает, если вы решите перейти на другую инфраструктуру JAX-RS.

  2. Другой подход заключается в том, чтобы выполнить эту проверку самостоятельно MessageBodyReader.Все, что вам нужно сделать, это зарегистрировать специальный читатель для ваших сущностей и проверить сущность внутри.Вы по-прежнему можете воспользоваться преимуществами стандартных MessageBodyReaders (например, JAXB или Jackson), используя @Context Providers.getMessageBodyReader().Хорошая часть этого подхода в том, что это стандарт JAX-RS.Плохо, что вы используете MessageBodyReaders для чего-то, для чего они не были предназначены.

  3. Самый простой подход состоит в проверке сущности в первой строке каждого метода ресурса.Это создаст некоторое дублирование кода, но иногда выигрывает простота.

1 голос
/ 28 февраля 2012

Одно решение - поскольку я использую Spring 2.5.x, я могу создать класс-оболочку, который реализует InitializingBean и делегирует валидатору Hibernate. Это работает - есть ли лучшее решение?

...