scala - 无法在 ActionBuilderImpl.invokeBlock() 中附加响应标头
问题描述
在我的 Play 2.6 应用程序中,我有一个自定义操作类,它执行一些常见的事情,适用于我的所有操作。省略不相关的细节,代码如下所示:
class VariantAction @Inject()
(parser: BodyParsers.Default)
(implicit ec: ExecutionContext)
extends ActionBuilderImpl(parser) with Results {
///
override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
if (aok) {
block(request).andThen {
case Success(result) =>
result.withHeaders("foo" -> "bar") // THIS DOES NOT WORK
case Failure(t) =>
}
}
catch {
/// Some exception handling
}
}
else {
Future.successful(ServiceUnavailable)
}
}
}
一切都按预期工作:andThen() 中的回调被执行,但它试图添加到响应中的标头没有被添加。我想有一个竞争条件,当回调被调用时,响应已经提交。当然,我可以将这个逻辑添加到所有具体行动中,但这似乎有悖于理性。
解决方案
推荐阅读
- azure - 将 Spark 连接到 Azure Blob 存储
- amazon-web-services - AWS Glue RenameField 和写入存储桶失败并出现 Broken Pipe 错误
- python - BeautifulSoup 使用替换删除标签导致“NoneType”对象不可调用
- javascript - 开玩笑:jest.fn() 和 jest.fn().mockImplementation() 之间的区别是什么
- postgresql - 将 jsonb 字段提取为行
- r - 在数据帧的数字中放置点
- javascript - 在 Vuejs 中使用复选框和单选按钮计算价格
- architecture - 系统设计:多个客户端更新同一张表
- javascript - 异步函数返回承诺,但 console.log 确实给出了想要的结果 | NodeJS 自己的模块
- sql - SQL 问题 - 如何从字符串中提取日期 - 错误说我需要显式类型转换