Каков правильный способ проверки запросов с помощью Resteasy?
Я использую Resteasy в сочетании с Google Guice, используя Resteasy-Guice. Я искал способы проверить мои тела запросов. Я хочу сделать например:
public static class MyPojo {
@NotEmpty private String contents;
}
а затем использовать в моем ресурсе
@POST
@ValidateRequest
public void doPost(@Valid MyPojo myPojo) {
// use myPojo only if valid
}
Я работал с поставщиком resteasy-hibernate-validator. Но поскольку я переключился на более новые версии, это ввело (нежелательное?) зависимость от EJB. См. также: RESTEASY-1056. В комментариях указано, что вы должны вместо этого переключитесь на более новый валидатор-11:
переключитесь на resteasy-validator-provider-11, который реализует более новую спецификацию Bean Validation 1.1.
на docs говорят:
проверка включена по умолчанию (при условии, что resteasy-validator-provider-11 -.jar доступен), хотя проверка параметров и возвращаемых значений может быть отключена или изменена при проверке.файл конфигурации xml. Увидеть гибернации Документация валидатора для деталей.
мне, однако, не удается заставить это работать в моей конфигурации, потому что я нахожу себя включающим зависимости, такие как hibernate-validator
, javax.el-api
, javax.el
и hibernate-validator-cdi
и аннотации как ValidateOnExecution
. Однако я не нахожу, что какой-либо из этих экземпляров или недействительных запросов отклоняется.
каков предпочтительный, легкий и рабочий способ проверки с помощью Resteasy?
2 ответов
вам не нужно указывать аннотации на самом ресурсе или выполнять дополнительную настройку. Просто аннотации ограничений на POJOs достаточно, чтобы он работал.
моя установка выглядит следующим образом:
ресурсный метод:
@POST
public void doPost(@Valid MyPojo myPojo) {
// use myPojo only if valid
}
POJO:
public static class MyPojo {
@NotEmpty private String contents;
}
протестировано со следующими зависимостями:
javax.validation
версия 1.1.0.Final
resteasy-validator-provider-11
версия 3.0.11.Final
hibernate-validator
версия 5.0.0.Final
и 5.0.1.Final
- у меня случайно была транзитивная зависимость от
hibernate-validator-provider
что вызвало предыдущие попытки потерпеть неудачу. Убедитесь, что у вас нет транзитивной зависимости отhibernate-validator-provider
. Для меня это вызвало следующее исключение: issues.jboss.org/browse/RESTEASY-826 - ... - на основе Томаса ответ я добавил зависимостей для
javax.validation
,resteasy-validator-provider-11
,hibernate-validator
. - тогда я все еще получал исключения (
java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException
). На основе этой ответ, который я добавилjavax.el-api
иel-impl
в качестве зависимостей. Я думаю, это потому, что я использую встроенный контейнер сервлетов. - мне пришлось удалить
@ValidateOnRequest
аннотации на ресурсах, они больше не нужны
последняя рабочая конфигурация:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-validator-provider-11</artifactId>
<version>3.0.11.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.1.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>