2017-09-25 91 views

回答

0

你不能只是投了身體任何你想要的類,它不工作的方式。如果你想有一個身體恢復類A,你需要遵循https://www.playframework.com/documentation/2.6.x/ScalaBodyParsers#writing-a-custom-body-parser

這是一個分析器,它變成一個流進A.但是,這不是一個演員。

+0

'' 高清controllerMethod() = Action.async(parse.json){REQ => VAL v =(req.body.as [MyCaseClass]) } '' 這似乎是工作 – curiousengineer

+0

這不是一個問題:你問到一個byte []的身體轉變成十級以上假設輸入是JSON,它使用已經存在的身體解析器。 –

0

你需要表單。 https://www.playframework.com/documentation/2.6.x/ScalaForms 因此,這將是這樣的:

val form = Form(
    mapping(
    "id" -> text, 
    "role" -> text 
)(MyData.apply)(MyData.unapply) 
) 

def action = Action.async { implicit request => 
form.bindFromRequest.fold(
    formWithErrors => { 
    BadRequest("Error") 
    }, 
    data => { 
    //data is your case class mapped 
    Ok("Success." + data.id + " " + data.role) 
    } 
) 
} 
0

這會幫助你:

class MyController @Inject()(cc: ControllerComponents) 
          (implicit val ec: ExecutionContext) extends AbstractController(cc){ 

    def foo() = Action.async(cc.parsers.json) { implicit request => 
    request.body.validate[MyData].fold(
     errors => errorsToFutureResult(errors), 
     myData => 
     //do staff with you data 
     Ok("")) 
    ) 
    } 
} 

這裏是你的情況的類定義:

case class MyData(id:Name, role:String) 
object MyData{ 
    implicit val myDataFormat: Format[MyData] = (
    (JsPath \ "id").format[Name] and 
     (JsPath \ "role").format[String] 
    ) (MyData.apply, unlift(MyData.unapply)) 
}