我有一齣戲控制器REST終點是需要,我要投射到下面的案例類在我Action.async
案例類MyData的一個JSON(ID:名稱,角色:字符串)鑄造請求,案件類遊戲
我做了一些讀數https://www.playframework.com/documentation/2.6.x/ScalaBodyParsers 我還不清楚如何使用語法將POST
有效載荷投上我的課。 我大意如下嘗試,但它不是編譯
Action.async(??) {??
}
我有一齣戲控制器REST終點是需要,我要投射到下面的案例類在我Action.async
案例類MyData的一個JSON(ID:名稱,角色:字符串)鑄造請求,案件類遊戲
我做了一些讀數https://www.playframework.com/documentation/2.6.x/ScalaBodyParsers 我還不清楚如何使用語法將POST
有效載荷投上我的課。 我大意如下嘗試,但它不是編譯
Action.async(??) {??
}
你不能只是投了身體任何你想要的類,它不工作的方式。如果你想有一個身體恢復類A,你需要遵循https://www.playframework.com/documentation/2.6.x/ScalaBodyParsers#writing-a-custom-body-parser
這是一個分析器,它變成一個流進A.但是,這不是一個演員。
你需要表單。 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)
}
)
}
這會幫助你:
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))
}
'' 高清controllerMethod() = Action.async(parse.json){REQ => VAL v =(req.body.as [MyCaseClass]) } '' 這似乎是工作 – curiousengineer
這不是一個問題:你問到一個byte []的身體轉變成十級以上假設輸入是JSON,它使用已經存在的身體解析器。 –