2013-02-15 187 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

相关问题