【问题标题】:akka-http has mixed java and scala dsl definitions, preventing compilationakka-http 混合了 java 和 scala dsl 定义,防止编译
【发布时间】:2017-02-28 03:13:29
【问题描述】:

尝试编译错误消息中的代码行时会发生以下错误。删除 withStatus 会使代码编译。

[错误] /home/anton/code/flow-mobile/server/src/main/scala/in/flow/server/FlowServerStack.scala:108:类型不匹配;

[错误] 发现:akka.http.javadsl.model.HttpResponse

[错误] 必需:akka.http.scaladsl.model.HttpResponse

[error] r mapEntity {_ transformDataBytes errorFlow(ermsg) } withStatus code

由于某种原因,函数签名是这样的(即使它在 scala dsl 包中找到)

  override def withStatus(statusCode: Int): 
    akka.http.javadsl.model.HttpResponse = copy(status = statusCode)
  override def withStatus(statusCode: akka.http.javadsl.model.StatusCode): 
    akka.http.javadsl.model.HttpResponse = copy(status = statusCode.asInstanceOf[StatusCode])

怎么了?

【问题讨论】:

    标签: scala akka-http


    【解决方案1】:

    withStatus 方法可能旨在作为与 Java 一起使用的构建器模式助手。

    如果你想从 Scala 中更改 HttpResponse,我认为使用 .copy(status = StatusCodes.OK) 会更习惯。

    【讨论】:

      【解决方案2】:

      问题是您应该使用copy 方法通过Scala dsl 的HttpResponse 更改statusCode、标头等。其他withXYZ 方法更多用于Java api 的内部工作。

      val originalResponse = ...
      
      val newResponse = originalResponse.copy(status = StatusCodes.OK)
      
      // or
      val newResponse = originalResponse.copy(status = StatusCodes.NotFound)
      

      您可以在此处查看定义的状态代码 - http://doc.akka.io/api/akka-http/current/akka/http/scaladsl/model/StatusCodes$.html

      【讨论】:

        猜你喜欢
        • 2014-01-26
        • 2012-06-25
        • 2021-12-29
        • 2017-12-23
        • 2021-10-25
        • 2016-06-21
        • 2012-08-24
        • 2014-08-18
        相关资源
        最近更新 更多