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

时间:2013-12-20 13:03:58

标签: validation rest jersey javabeans guice

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

我已经发现support用于球衣的豆类验证,但遗憾的是没有 想法如何将它与guice整合。我需要做的大部分验证都是简单的@NotNull检查。我需要验证值并在验证失败时返回详细消息。

有什么想法吗?建议?

1 个答案:

答案 0 :(得分:5)

我已经解决了。

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

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

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

org.apache.bval.guice.ValidationModule

这是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()
    }
}

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

org.apache.bval.guice.Validate

参数例如:

javax.validation.constraints.NotNull

就是这样。