2013-07-09 60 views
4

我使用PlayFramework中的Play WS API与外部API进行通信。 我需要处理收到的数据,但不知道如何。我得到一个响应,我想将它传递给其他函数,如JSON对象。我如何才能做到这一点? 我使用的代码可以在下面看到。 谢谢!Playframework WS API响应处理

def getTasks = Action { 
    Async { 
     val promise = WS.url(getAppProperty("helpdesk.host")).withHeaders(
     "Accept" -> "application/json", 
     "Authorization" -> "Basic bi5sdWJ5YW5vdjoyMDEzMDcwNDE0NDc=").get() 
     for { 
     response <- promise 
     } yield Ok((response.json \\ "Tasks")) 
    } 
    } 

回答

0

我接过一看doc,你可以尝试:

Async { 
    WS.url(getAppProperty("helpdesk.host")).withHeaders(
     "Accept" -> "application/json", 
     "Authorization" -> "Basic bi5sdWJ5YW5vdjoyMDEzMDcwNDE0NDc=").get().map{ 
     response => Ok(response.json \\ "Tasks") 
    }  
} 
+0

我已经试过这样的代码,但抓住了新的问题。 [code]'val map = scala.collection.mutable.Map [String,String]() WS.url(getAppProperty(“helpdesk.host”))。withHeaders( “Accept” - >“application/json “, ”Authorization“ - > Basic bi5sdWJ5YW5vdjoyMDEzMDcwNDE0NDc =”))。get()。map { response => val obj =(response.json \\“Tasks”)。toString map.put(“object” OBJ) 的println( “地图:” + OBJ) } 确定( “对象:” + map.getOrElse( “对象”,0))'[/代码] 返回的映射是空的,但在括号的响应处理映射包含值 –

+0

对不起,我不知道代码格式怎么样 –

1

我得到回应,我想将它传递给其它功能像一个JSON对象。

我不知道我理解你的问题,但我猜你想改变你从WS调用返回给客户端之前接收的JSON,而这种转变可能需要几行代码。如果这是正确的,那么你只需要周围添加您的yield语句大括号,所以你可以做响应更多的工作:

def getTasks = Action { 
    Async { 
    val promise = WS.url(getAppProperty("helpdesk.host")).withHeaders(
     "Accept" -> "application/json", 
     "Authorization" -> "Basic bi5sdWJ5YW5vdjoyMDEzMDcwNDE0NDc=").get() 
    for { 
     response <- promise 
    } yield { 
     // here you can have as many lines of code as you want, 
     // only the result of the last line is yielded 
     val transformed = someTransformation(response.json) 
     Ok(transformed) 
    } 
    } 
}