【问题标题】:Manage JSON error on Play2 controller with scala使用 scala 管理 Play2 控制器上的 JSON 错误
【发布时间】:2012-05-17 00:42:55
【问题描述】:

这是我在 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?

【问题讨论】:

    标签: json scala playframework-2.0


    【解决方案1】:

    如果我理解正确,您想处理多个缺失的字段。我的解决方案如下所示:

        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 "))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 2012-08-05
      • 2016-09-10
      相关资源
      最近更新 更多