我有一个播放控制器REST端点,它将我想要的json转换为POST
中的以下案例类
case class MyData(id:Name,role:String)
我在source code做了一些阅读
我仍然不清楚如何使用语法将Action.async(??) {??
}
有效负载转换为我的类。
我正在尝试以下几行,但它没有编译
*-androidTest.apk
答案 0 :(得分:0)
你不能只为自己想要的任何课程建立一个身体,它不会那样工作。如果您希望正文返回A类,则需要关注https://www.playframework.com/documentation/2.6.x/ScalaBodyParsers#writing-a-custom-body-parser
这是一个将流转换为A的解析器。但这不是演员。
答案 1 :(得分: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)
}
)
}
答案 2 :(得分: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))
}