【问题标题】:Need help creating a dummy WSResponse object (Scala + Play)需要帮助创建一个虚拟 WSResponse 对象(Scala + Play)
【发布时间】:2020-06-15 12:42:40
【问题描述】:

我有一个代码示例,如下所示,我使用 WSClient 进行 API 调用。我正在使用 2.5.x 和 Scala 2.11.11(使用 Play 提供的 WSClient 不是独立的)。在异常情况下,我需要将 WSResponse 对象返回给此方法的调用者。从文档中我找到了提供 AhcWSResponse 的 Ahc 包。知道如何创建 WSResponse 对象吗?我根据下面的链接尝试过,但这不起作用。

How to create a WSResponse object from string for Play WSClient

def fetchData (request: WSRequest): Future[WSResponse] = {  
   request.withQueryString("apitoken" -> token).get().flatMap { dataResponse =>
         if (dataResponse.status == 200) {
            Future(Ok(dataResponse.json))
         } else if (dataResponse.status == 400) {
         ...
         }
  }.recover {
     case e: Exception =>
        //need  to return a WSResponse object - how do i create one here 
  }
}

【问题讨论】:

    标签: scala playframework ws-client


    【解决方案1】:

    实际上你不需要创建它。你拥有了它。 dataResponse 是您正在寻找的类型。尝试使用它并找到您需要的数据。您可以尝试调用:

    dataResponse.body
    

    或:

    dataResponse.underlying
    

    【讨论】:

    • dataResponse 不在“recover”块的范围内。
    【解决方案2】:

    有两种方法可以解决这个问题:

    (1) 通过创建一个虚拟 WSResponse 实例,如下所示:

    class DummyWSResponse extends WSResponse {
          def status: Int = 500
          def allHeaders: Map[String, Seq[String]] = ???
          def body: String = ???
          def bodyAsBytes: akka.util.ByteString = ???
          def cookie(name: String): Option[play.api.libs.ws.WSCookie] = ???
          def cookies: Seq[play.api.libs.ws.WSCookie] = ???
          def header(key: String): Option[String] = ???
          def json: play.api.libs.json.JsValue = ???
          def statusText: String = ???
          def underlying[T]: T = ???
          def xml: scala.xml.Elem = ???
       }
    

    (2) [首选] 使用 mockito-scala:

    import org.mockito.MockitoSugar._
    ...
    {...}.recover {
       case e: Exception =>
          val mockResponse = mock[WSResponse]
          when(mockResponse.status) thenReturn 500
          mockResponse
    }
    

    我在 build.sbt 中使用了以下内容来添加 Mockito 依赖项:

    libraryDependencies += "org.mockito" % "mockito-scala_2.11" % "1.14.4"
    

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      相关资源
      最近更新 更多