问题描述
我创建了以下两个Actions
def action1: Action[Either[MaxSizeExceeded,AnyContent]] = silhouette.SecuredAction.async(parse.maxLength(maxAllowedBodySize,parse.anyContent)(materializer)) { ...}
def action2:Action[AnyContent] = silhouette.UserAwareAction.async { ...}
在对它们进行单元测试时,我发现action1
返回的结果是Future[Result]
,而action2
的返回结果是Accumulator[ByteString,Result]
val response:Accumulator[ByteString,Result] = testEnv.controller.action1(request)
val response:Future[Result] = userTestEnv.controller.action2(request)
我不太清楚为什么会有区别吗?为什么返回类型不同?
解决方法
我认为原因是对于类型为[Either [MaxSizeExceeded,AnyContent]]的Action
,Action
返回Accumulator
-https://www.playframework.com/documentation/2.6.x/ScalaEssentialAction
通常来说,如果Play
知道主体可以容纳在内存中,那么它将返回Future[Result]
,否则返回Accumulator
。