簡體   English   中英

使用scala管理Play2控制器上的JSON錯誤

[英]Manage JSON error on Play2 controller with scala

這是我對scala的第一次體驗。 我嘗試使用Play2制作一個小型REST控制器。

我的主要目標是讓一個帶有一些json數據的POST路由到正文。

這就是我已經做過的事情:

def instMeasurement(variable: String) = Action { request =>
    request.body.asJson.map { json =>
        val measurement = MongoDBObject(
            "variable" -> variable,
             "quantity" -> (json \ "quantity").asOpt[Float].getOrElse(BadRequest("Missing parameter [quantity]")),
             "when" -> (json \ "occurTime").asOpt[String].getOrElse(BadRequest("Missing parameter [occurTime]")))

        dao("powermeter").save(measurement)

        Ok(json)
    }.getOrElse(
        BadRequest(Json.toJson("JSON Body missing"))
    )
}

一切正常,解決了錯誤的過程。 我想路由到BadRequest。

Play 2文檔顯示了一個小例子:

def sayHello = Action { request =>
  request.body.asJson.map { json =>
    (json \ "name").asOpt[String].map { name =>
      Ok("Hello " + name)
    }.getOrElse {
      BadRequest("Missing parameter [name]")
    }
  }.getOrElse {
    BadRequest("Expecting Json data")
  }
}

它聽起來很完美,但它沒有顯示如何在json中處理多個值。

如何用json中的2個值做同樣的事情(例如,名稱和名字)? 如果json不完整,我如何解析json並路由到BadRequest?

如果我理解正確,你想要處理多個缺少的字段。 我的解決方案看起來像這樣:

    val fields = List("firstname", "lastname")
    val options = fields.map(name => (json \ name).asOpt[String])
    val errors = options.zip(fields).collect { 
         case (None, f) => f
   }

   if(errors.isEmpty){  Ok(options.flatten.mkString(" "))} 
   else { BadRequest("Missing Fields: " + errors.mkString(" \n "))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM