scala - 是否可以在 Play Framework 2.8 中的动作组合函数中将请求正文作为 JsValue 访问?
问题描述
在 Play 文档中,请求类型是动作组合函数的通用 [A]。我正在尝试向负责查询数据的每个端点添加一个自定义查询对象,为此我需要将请求正文作为 JsValue 并将其解析为适当的案例类。我似乎无法在操作中向 WrappedRequest 或优化方法添加类型,并且在优化方法中也不能这样做request.body.as[JsValue]
。有没有办法完成以下?
我想在处理查询数据的端点中使用动作组合来做这样的事情:
def SomeEndpointWithAQuery() = auth.protectedAction(parse.json).andThen(QueryAction)) { request:QueryRequest[JsValue] =>
val query = request.queryObject
res = // Do query stuff
Ok(res)
}
QueryRequest 是一个 WrappedRequest,它提供了一个查询对象:
class QueryRequest[A](val query: QueryParser, request: AuthUserRequest[A]) extends WrappedRequest[A](request) {
def queryObject = query.parseQuery()
}
object QueryActionObject {
def QueryAction()(implicit ec: ExecutionContext): ActionRefiner[AuthUserRequest, QueryRequest] = new ActionRefiner[AuthUserRequest, QueryRequest] {
def executionContext: ExecutionContext = ec
def refine[A](input: AuthUserRequest[A]) = Future.successful {
val qp = new QueryParser(input.body.as[JsObject])
if (qp.validate()) {
Right(new QueryRequest(qp, input))
} else {
// bad request handling ...
}
}
}
}
auth.protectedAction 是一个基于 request.session 信息添加用户信息的 actionBuilder,它不应该影响这个 queryAction 的工作方式。
解决方案
推荐阅读
- paypal - PayPal Pro - PayFlow:setExpressCheckout API 调用返回“未注册此投标类型”
- python - 从在网格内连接时找到最长的整数
- python - Django,我如何计算每组有多少学生?
- php - 错误 400 错误请求,不和谐添加公会成员 guild.join
- excel - 仅在不存在时在列表末尾附加一个值。在 Excel 中
- reactjs - react-router 中 location.state 的类型或接口
- php - 如何从 API themoviedb.org 获取复杂数组中的元素
- python - 创建一个 3d numpy 数组,其条目沿给定方向增加
- css - Ag-grid 将某些列的列单元格文本设置为右侧
- python - 获取连续最小比较的索引