2013-02-15 142 views
1

Play/Scala新手問題: 如何獲得存儲在結果的字符串?如何從QueryString返回的列表中獲取字符串值?

object App extends Application { 
    def route = { 
    case GET(Path("/feed/geocodeo")) & QueryString(qs) => Action{ request=> 
     val result = QueryString(qs,"latlng").getOrElse("40.714224,-73.961452") 
     val response = WS.url("http://maps.googleapis.com/maps/api/geocode/json?latlng="+result.toString+"&sensor=false").get() 
     val body = response.value.get.body 
     Ok(body).as("text/html") 
    } 
    } 
} 
+0

我不確定QueryString是否返回List [String],因此編輯了原始問題並省略了QueryString語句。 – gosanjeev 2013-02-15 20:38:42

+0

QueryString在哪裏定義?我試圖找到它的文檔,但沒有運氣。看到你的進口也可能有很大幫助。 – Dylan 2013-02-15 21:06:45

+0

進口play.api.mvc._ 進口play.api.mvc.Results._ 進口play.api.libs.ws.WS 進口play.libs._ 查詢字符串被返回選項[java.util.List中[java.lang.String中]。問題已解決。布賴恩解釋下面和選項的備忘單是有幫助的:http://blog.tmorris.net/posts/scalaoption-cheat-sheet/ – gosanjeev 2013-02-15 22:35:10

回答

2

如果QueryString返回一個List [String],那麼你的代碼不應該編譯。

scala> List("hi","bye").getOrElse("whatever") 
<console>:8: error: value getOrElse is not a member of List[java.lang.String] 
       List("hi","bye").getOrElse("whatever") 
          ^

你的代碼是否編譯?如果是這樣,QueryString是一個有getOrElse方法的東西,並且結果是String的最具體的超類,以及QueryString返回的結果。

通常你會打電話上Option[Something] getOrElse,並傳遞給getOrElse對象應具有相同的類型Something否則你會回來的對象與不會是有用的一種類型。

+0

代碼編譯,但我無法提取結果中的字符串值 – gosanjeev 2013-02-15 20:43:56

+0

謝謝布萊恩。瞭解使用Option有助於解決問題。 'code' var result = QueryString(qs,「latlng」) var url:String =「http://maps.googleapis.com/maps/api/geocode/json?latlng=」 if(result.isEmpty url + =「40.714224,-73.961452&sensor = false」 else url + = result.get.get(0)+「&sensor = false」代碼' – gosanjeev 2013-02-15 22:26:15

+0

更簡潔的方式可能是:'val url = result.headOption map(「http:// whatever /」+ _ +「/ etc」)getOrElse「http://a.diferent.url」' 如果結果是一個'List [String]','.headOption'返回一個'Option [String]'。使用函數映射選項時,會將字符串(如果存在)插入到_ _中,並返回一個帶有結果URL的「Option [String]」。如果列表爲空,則結果將爲「無」,並且「getOrElse」將提供備用URL。 – Brian 2013-02-16 02:42:57

相關問題