簡體   English   中英

使用Resteasy驗證請求的正確方法是什么?

[英]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-validatorjavax.el-apijavax.elhibernate-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.Final5.0.1.Final

  • 我不小心對hibernate-validator-provider有一個傳遞依賴,導致以前的嘗試失敗。 確保您沒有對hibernate-validator-provider的傳遞依賴。 對我來說,這導致了以下異常:issues.jboss.org/browse/RESTEASY-826。
  • 根據Thomas的回答,我在javax.validationresteasy-validator-provider-11hibernate-validator添加了依賴javax.validation
  • 然后我仍然收到異常( java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException )。 根據這個答案,我添加了javax.el-apiel-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM