是否可以在Akka Http中验证POST主体?
Case Class Validation似乎只适用于获取请求。
举个例子:
case class User(name: String){
require(name)
}
.....
(post & entity(as[User])) { user =>
complete(doSomething(user.name))
}
我希望上面的代码抛出ValidationRejection rejection
答案 0 :(得分:1)
您可以在完整指令的范围内使用require
(path("stats") & parameter("idsParam")) { idsParam =>
complete {
require(idsParam.length > 1)
val ids = idsParam.split(",").map(v => CaseId(v).value)
DBManager.getArticleStats(ids).map { case (id, stats) => IdWithValue(CaseId(id), stats) }
}
}
处理你的POST请求。
通常我有自定义异常处理程序,它将所有异常包装成我的API客户端期望的格式,例如json。 require
抛出IllegalArgumentException
所以如果我们愿意的话,让我们以特殊的方式处理它。
protected implicit def myExceptionHandler =
ExceptionHandler {
case ex: IllegalArgumentException => ctx => {
val cause = ex.getCause
ex.printStackTrace()
ctx.complete(StatusCodes.InternalServerError, ErrorResponse(ex.code, ex))
}
case ex: Throwable => ctx =>
logger.warning("Request {} could not be handled normally", ctx.request)
ex.printStackTrace()
ctx.complete(StatusCodes.InternalServerError, ErrorResponse(StatusCodes.InternalServerError.intValue, ex))
}
其中ErrorResponse
是我使用spray-json
序列化为json的案例类