我使用jersey + guice开发REST应用程序。我想对查询参数进行输入验证,但我正在寻找的是一个随时可用的'解决方案,而不是自己写。
我已经发现support用于球衣的豆类验证,但遗憾的是没有 想法如何将它与guice整合。我需要做的大部分验证都是简单的@NotNull检查。我需要验证值并在验证失败时返回详细消息。
有什么想法吗?建议?
答案 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
就是这样。