【问题标题】:Playframework Scala Async controller for JSON request用于 JSON 请求的 Playframework Scala 异步控制器
【发布时间】:2016-04-25 20:56:28
【问题描述】:

我正在尝试编写一个异步 PlayFramework 控制器来接收 POST 请求并在数据库中创建一个新对象:

  def register = Action(BodyParsers.parse.json) { request =>
    val businessInfoResult = request.body.validate[BusinessInfo]
    businessInfoResult.fold(errors =>{
      BadRequest(Json.obj("status"-> "Error", "message"->JsError.toJson(errors))) //Error on this line
    }, businessInfo=> {
      //save the object
      Ok(Json.obj("status" ->"OK", "message" -> ("Place '"+ businessInfo.businessName +"' saved.") )) //Error on this line

    })
  }

但是,它不断抛出以下错误:

reference to Json is ambiguous; it is imported twice in the same scope by import play.libs.Json and import play.mvc.BodyParser.Json AsyncController.scala   

错误在第 108 行和第 105 行引发,它们对应于上面用 //Error on this line 注释的行(带有 BadRequest(..) 和 Ok(..) 的行)

我该如何解决这个问题?我可以使用 new JsValue(Map(..)) 但想知道是否还有其他方法。

非常感谢您的帮助。

【问题讨论】:

    标签: scala playframework playframework-2.5


    【解决方案1】:

    您可能想致电play.libs.Json,而不是Json。这里的问题是,考虑到文件中的导入,您有两个名为Json 的对象/类,编译器无法选择应该使用哪一个。调用play.libs.Json,您将为编译器提供足够的信息。

    【讨论】:

      【解决方案2】:

      您可以在导入中使用一个或多个别名:

      import play.libs.Json
      import play.mvc.BodyParser.{Json => JsonParser}
      

      JsonParser 只是一个例子。你可以使用任何你喜欢的东西,只要它在文件中是唯一的。

      您现在可以使用别名JsonParser,而不是写Json(对于play.mvc.BodyParser.Json)。

      但是你确定你甚至需要导入play.mvc.BodyParser.Json 吗?因为你好像没用过。

      【讨论】:

        猜你喜欢
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        • 2018-02-23
        • 2013-03-24
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        • 2019-07-18
        相关资源
        最近更新 更多