简体   繁体   中英

Playframework Scala Async controller for JSON request

I am trying to write an async PlayFramework controller that receives a POST request and creates a new object in the database:

  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

    })
  }

However, it keeps throwing the error below:

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   

The errors are thrown at line 108 and 105 which correspond to lines commented with //Error on this line above (lines with BadRequest(..) and Ok(..))

How do I fix this issue? I can using new JsValue(Map(..)) but was wondering if there's any other way.

Thank you so much for your help.

Rather than Json , you probably want to call play.libs.Json . The problem here is that, considering the imports in your file, you have two objects / classes called Json and the compiler can't choose which one it should use. Calling play.libs.Json , you'll give the compiler enough information.

You could use one or more aliases in your imports:

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

JsonParser is just an example. You can use anything you like as long as it's unique within the file.

Instead of writing Json (for play.mvc.BodyParser.Json ) you could now use the alias JsonParser .

But are you sure you even need to import play.mvc.BodyParser.Json ? Because you don't seem to use it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM