2011-08-04 2 views
1

こんにちは、私はリフトに私のAPIについては、以下の使用しています:三つのパラメータのいずれかが、それは誤りを与える不足している場合どのようにAPIにPOSTパラメータを抽出するために - リフトフレームワーク

case "api" :: "all" :: _ Get req => for { 
    val after <- req.param("after") 
    val before <- req.param("before") 
    val limit <- req.param("limit") 
} yield JsonResponse(json(ResponseLimitAfterBefore(limit.toInt, 
                after.toString, 
                before.toString))) 

私の問題があります。パラメータが不足している場合は、どのように値を割り当てるのかを教えてください。たとえば、afterがURLにない場合、後でデフォルト値を割り当てるにはどうすればよいですか?

おかげで、あなたは内包のためのScalaの内どのように機能するかを理解していないと思われる場合は

答えて

2

-Faran。次のことを考えてみましょう:xxが値を持っているにもかかわらず、結果はNoneであることを

scala> val x: Option[String] = Some("X") 
x: Option[String] = Some(X) 

scala> val y: Option[String] = None 
y: Option[String] = None 

scala> for(xx <- x; yy <- y) yield yy 
res0: Option[String] = None 

scala> for(yy <- y; xx <- x) yield xx 
res1: Option[String] = None 

注意してください。あなただけ提供したい場合は、

JsonResponse(json(
ResponseLimitAfterBefore(
    limit.map(_.toInt).openOr(0), 
    after.openOr("after default"), 
    before.openOr("another default") 
))) 

または:req.paramはあなたにBox[String]を与える(Option[String]に似ている)(あなたはparamsを渡されたどんな反応をしたい場合)、あなたはこのような何かを行うことができることを考えます全体的なデフォルトの応答はなく、paramterisedデフォルトの応答:

(for { 
    after <- req.param("after") 
    before <- req.param("before") 
    limit <- req.param("limit") 
} yield JsonResponse(json(ResponseLimitAfterBefore(
    limit.toInt, after, before))) 
) openOr BadRequestResponse() 

私は一緒に遊んでお勧めしLiftResponseは、より多くのサブタイプとも内包表記は、実際に行うためにどのようにしっかり把握を得て、両方。

希望に役立ちます。

+0

パラメタの1つがURLにない場合、デフォルト値が必要なので後者は使用できません。しかし、最初の1つは、openOrがStringのメンバーではないというエラーが発生しています。行の後に.openOr( "defaultvalue")を指定します。 – Faran

+0

必要なもの:req.param( "after")。openOr( "default") – timothy

+0

[INFO] found:String [INFO] required:?{val flatMap:?} [INFO]暗黙的な変換は適用されません [INFO]両方のメソッドstrToSがオブジェクト型のJE(String)net.liftweb.http.js.JE.Str [INFO]およびメソッドstringWrapperがオブジェクトの型Predef(String)scala.runtimeにあります。リッチテキスト [INFO]は、Stringから?{val flatMap:?} [INFO] val < - req.param( "後")の変換関数に変換することができます。openOr( "IA175363") [INFO]^ [ERROR ] 1つのエラーが見つかりました [INFO] --------------------------------------- – Faran

関連する問題