2013-12-20 35 views
4

我使用球衣+ guice來開發REST應用程序。我想爲查詢參數進行輸入驗證,但是我正在尋找的是「隨時可用」的解決方案,而不是自己寫的。如何將球衣與guice和bean驗證相結合

我已經找到support與澤西島的bean驗證,但不幸沒有 想法如何將它與guice集成。我需要做的大多數驗證都是簡單的@NotNull檢查。我需要驗證該值並在驗證失敗時返回詳細的消息。

任何想法?建議?

+0

這也可以整合Guice + Hibernate驗證器:https://github.com/xvik/guice-validator我剛剛證實它可以正常使用該組合+澤西島: –

回答

5

我已經完成了。

而不是使用glassfish擴展球衣我使用apache bean驗證。需要進行以下的依賴將被添加到項目(gradle這個樣子):

compile 'org.apache.bval:bval-guice:0.5' 
compile 'javax.validation:validation-api:1.1.0.Final' 

在創建吉斯注射器以下模塊應加入:

org.apache.bval.guice.ValidationModule 

這裏是映射的樣子(常規)


import com.google.inject.Singleton 

import javax.validation.ConstraintViolationException 
import javax.ws.rs.core.Response 
import javax.ws.rs.ext.ExceptionMapper 
import javax.ws.rs.ext.Provider 

import static groovy.json.JsonOutput.toJson 
import static javax.ws.rs.core.Response.Status.BAD_REQUEST 
import static javax.ws.rs.core.Response.status 

@Provider 
@Singleton 
class ValidationExceptionMapper implements ExceptionMapper { 

    @Override 
    Response toResponse(ConstraintViolationException e) { 
     status(BAD_REQUEST).entity(toJson(e.constraintViolations*.message)).build() 
    } 
} 

異常映射器必須綁定在任何具有簡單bind()方法的guice模塊中。 然後法進行驗證的參數應標有:

org.apache.bval.guice.Validate 

而例如使用參數:

javax.validation.constraints.NotNull 

這就是全部。

+0

這個答案確實保存了我的培根。順便說一句,非常感謝你,如果它是包含在/傳遞給ResourceConfig的包中的一部分,則不必手動「綁定()」ExceptionMapper。 – oberger

+0

不客氣。我想這足以使用'@ Singleton'註釋。 – Opal

+1

如果您是Jersey 1.x用戶,除了上述方法中的上述'org.apache.bval.guice.Validate'註釋之外,還需要在bean參數之前使用常規的'javax.validation.Valid'註釋。 –