如何将球衣与guice和bean验证整合在一起

Opa*_*pal 4 validation rest jersey guice javabeans

我正在使用jersey + guice来开发REST应用程序.我想对查询参数进行输入验证,但我正在寻找的是一种"随时可用"的解决方案,而不是自己编写.

我已经找到了对泽西的bean验证的支持,但遗憾的是我不知道如何将它与guice集成.我需要做的大部分验证都是简单的@NotNull检查.我需要验证值并在验证失败时返回详细消息.

有任何想法吗?建议?

Opa*_*pal 5

我已经解决了.

我没有使用glassfish扩展到jersey,而是使用了apache bean验证.以下依赖项需要添加到项目(gradle方式):

compile 'org.apache.bval:bval-guice:0.5'
compile 'javax.validation:validation-api:1.1.0.Final'
Run Code Online (Sandbox Code Playgroud)

在创建guice注入器跟随模块时应添加:

org.apache.bval.guice.ValidationModule
Run Code Online (Sandbox Code Playgroud)

这是mapper的样子(groovy)


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()
    }
}
Run Code Online (Sandbox Code Playgroud)

必须使用简单的bind()方法在任何guice模块中绑定异常映射器.然后使用要验证的参数的方法应标记为:

org.apache.bval.guice.Validate
Run Code Online (Sandbox Code Playgroud)

并且参数例如:

javax.validation.constraints.NotNull
Run Code Online (Sandbox Code Playgroud)

就这样.