[英]What is the proper way to validate requests with Resteasy?
我使用Resteasy-Guice將Resteasy與Google 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-provider。 但是,自從我切換到更新的版本后,這就引入了(不需要的?)依賴關系到EJB。 另請參見: RESTEASY-1056 。 在評論中聲明您應該切換到較新的驗證器-11:
切換到resteasy-validator-provider-11,它實現了更新的Bean Validation 1.1規范。
文檔說:
默認情況下啟用驗證(假設resteasy-validator-provider-11-.jar可用),但可以在validation.xml配置文件中關閉或修改參數和返回值驗證。 有關詳細信息,請參閱Hibernate Validator文檔。
然而,我沒有設法讓這個工作到我的配置,因為我發現自己包括依賴,如hibernate-validator
, javax.el-api
, javax.el
和hibernate-validator-cdi
javax.el
以及類似ValidateOnExecution
注釋。 但是,我沒有發現任何實例化或無效請求被拒絕。
使用Resteasy進行驗證的首選,輕量級和工作方式是什么?
您不必在資源本身上指定任何注釋或執行其他配置。 只需對POJO進行約束注釋即可使其正常工作。
我的設置如下:
資源方法:
@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
version 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
添加了依賴javax.validation
。 java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException
)。 根據這個答案,我添加了javax.el-api
和el-impl
作為依賴項。 我想這是因為我使用的是嵌入式servlet容器。 @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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.