簡體   English   中英

使用JSR303驗證JAX-RS(Apache Wink)資源?

[英]Validating JAX-RS (Apache Wink) resources with JSR303?

是否可以在JAX-RS資源上有效使用JSR303(Bean Validation)注釋?

例如,如果我有一個資源成員,我注釋了@NotEmpty,如果不滿足此約束,則會向客戶端生成錯誤?

這似乎是顯而易見的事情,但也樂於被告知更好的方式(我不想將驗證移到ORM /數據庫級別)

你真的是要驗證資源成員嗎? 通常資源成員以這種方式或其他方式注入(它是上下文,實體或路徑/查詢/矩陣參數),只要JAX-RS框架工作,您就可以正確地注入這些成員。

我個人認為驗證實體更有意義,因為它已經通過電線到達,由MessageBodyReader填充,基本上你不知道里面是什么,對吧?

因此,如果您決定驗證實體,可以采用以下幾種方法:

  1. AFAIK,Apache Wink不支持內置驗證。 您可以實現處理程序。 請參閱DeploymentConfiguration.initRequestHandlersChain() 它支持添加用戶處理程序。 在您的處理程序中,您可以執行任何驗證。 我甚至認為如果你貢獻這個代碼,Wink社區會很高興。
    這種方法唯一的問題 - 它與Apache Wink綁定。 如果您決定轉移到不同的JAX-RS框架,它將無法工作。

  2. 另一種方法是在您自己的MessageBodyReader進行此驗證。 您需要做的就是為您的實體注冊一個特殊的閱讀器並驗證其中的實體。 您仍然可以使用@Context Providers.getMessageBodyReader()來利用標准的MessageBodyReaders(如JAXB或Jackson @Context Providers.getMessageBodyReader() 這種方法的好處在於它是標准的JAX-RS。 你使用MessageBodyReaders做他們不想要的東西的壞處。

  3. 最簡單的方法是在每個資源方法的第一行驗證實體。 它會創建一些代碼重復,但有時簡單獲勝。

一個解決方案 - 因為我使用Spring 2.5.x,我可以創建一個實現InitializingBean的包裝類,並委托給Hibernate的驗證器。 它有效 - 有更好的解決方案嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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