playframework 2.4 - 未指定值参数 headers 错误
playframework 2.4 - Unspecified value parameter headers error
我正在从 2.3 升级 playframework 2.4,我更改了版本,然后如果我编译相同的代码,我会看到以下错误。由于我是 Scala 的新手,我正在尝试学习 Scala 来解决这个问题,但仍然不知道问题是什么。我想要做的是从原始请求 header 中添加一个请求 header 值。任何帮助将不胜感激。
[error] /mnt/garner/project/app-service/app/com/company/playframework/filters/LoggingFilter.scala:26: not enough arguments for constructor Headers: (headers: Seq[(String, String)])play.api.mvc.Headers.
[error] Unspecified value parameter headers.
[error] val newHeaders = new Headers { val data = (requestHeader.headers.toMap
日志过滤器class
class LoggingFilter extends Filter {
val logger = AccessLogger.getInstance();
def apply(next: (RequestHeader) => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
val startTime = System.currentTimeMillis
val requestId = logger.createLog();
val newHeaders = new Headers { val data = (requestHeader.headers.toMap
+ (AccessLogger.X_HEADER__REQUEST_ID -> Seq(requestId))).toList }
val newRequestHeader = requestHeader.copy(headers = newHeaders)
next(newRequestHeader).map { result =>
val endTime = System.currentTimeMillis
val requestTime = endTime - startTime
val bytesToString: Enumeratee[ Array[Byte], String ] = Enumeratee.map[Array[Byte]]{ bytes => new String(bytes) }
val consume: Iteratee[String,String] = Iteratee.consume[String]()
val resultBody : Future[String] = result.body |>>> bytesToString &>> consume
resultBody.map {
body =>
logger.finish(requestId, result.header.status, requestTime, body)
}
result;
}
}
}
编辑
我更新了如下代码并且编译良好
更改了以下代码
val newHeaders = new Headers { val data = (requestHeader.headers.toMap
+ (AccessLogger.X_HEADER__REQUEST_ID -> Seq(requestId))).toList }
到
val newHeaders = new Headers((requestHeader.headers.toSimpleMap
+ (AccessLogger.X_HEADER__REQUEST_ID -> requestId)).toList)
它只是指出,如果您要构造 Headers
,您需要提供一个名为 headers
的字段,该字段的类型为 Seq[(String, String)]
。如果您省略初始 new
,您将使用相应 object
的 apply
函数作为 Headers
,它只需要一个可变参数 (String, String)并且您的代码应该可以工作。如果您查看文档 https://www.playframework.com/documentation/2.4.x/api/scala/index.html#play.api.mvc.Headers 并在对象文档和 class 之间切换,它应该变得清晰。
我正在从 2.3 升级 playframework 2.4,我更改了版本,然后如果我编译相同的代码,我会看到以下错误。由于我是 Scala 的新手,我正在尝试学习 Scala 来解决这个问题,但仍然不知道问题是什么。我想要做的是从原始请求 header 中添加一个请求 header 值。任何帮助将不胜感激。
[error] /mnt/garner/project/app-service/app/com/company/playframework/filters/LoggingFilter.scala:26: not enough arguments for constructor Headers: (headers: Seq[(String, String)])play.api.mvc.Headers.
[error] Unspecified value parameter headers.
[error] val newHeaders = new Headers { val data = (requestHeader.headers.toMap
日志过滤器class
class LoggingFilter extends Filter {
val logger = AccessLogger.getInstance();
def apply(next: (RequestHeader) => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
val startTime = System.currentTimeMillis
val requestId = logger.createLog();
val newHeaders = new Headers { val data = (requestHeader.headers.toMap
+ (AccessLogger.X_HEADER__REQUEST_ID -> Seq(requestId))).toList }
val newRequestHeader = requestHeader.copy(headers = newHeaders)
next(newRequestHeader).map { result =>
val endTime = System.currentTimeMillis
val requestTime = endTime - startTime
val bytesToString: Enumeratee[ Array[Byte], String ] = Enumeratee.map[Array[Byte]]{ bytes => new String(bytes) }
val consume: Iteratee[String,String] = Iteratee.consume[String]()
val resultBody : Future[String] = result.body |>>> bytesToString &>> consume
resultBody.map {
body =>
logger.finish(requestId, result.header.status, requestTime, body)
}
result;
}
}
}
编辑
我更新了如下代码并且编译良好
更改了以下代码
val newHeaders = new Headers { val data = (requestHeader.headers.toMap
+ (AccessLogger.X_HEADER__REQUEST_ID -> Seq(requestId))).toList }
到
val newHeaders = new Headers((requestHeader.headers.toSimpleMap
+ (AccessLogger.X_HEADER__REQUEST_ID -> requestId)).toList)
它只是指出,如果您要构造 Headers
,您需要提供一个名为 headers
的字段,该字段的类型为 Seq[(String, String)]
。如果您省略初始 new
,您将使用相应 object
的 apply
函数作为 Headers
,它只需要一个可变参数 (String, String)并且您的代码应该可以工作。如果您查看文档 https://www.playframework.com/documentation/2.4.x/api/scala/index.html#play.api.mvc.Headers 并在对象文档和 class 之间切换,它应该变得清晰。