【发布时间】:2018-01-03 16:53:24
【问题描述】:
rest api 的 JS 客户端可以将 int 和 string 作为某个字段的值发送。
{
field1: "123",
field2: "456"
}
{
field1: 123,
field2: 456
}
这里是 json 请求正文应转换为 case 类的 play 动作:
case class Dto(field1: Int, field2: Int)
object Dto {
implicit val reads = Json.reads[Dto]
}
def create = Action.async(BodyParsers.parse.json) { implicit request =>
request.body.validate[Dto].map {
dto => someService.doStuff(dto).map(result => Ok(Json.toJson(result)))
}.recoverTotal {
e => jsErrorToBadRequest(e)
}
}
如果我发送带有 int 值的 json 值,它可以正常工作。但是如果 field1 或 field2 是字符串(“123”、“456”),它会失败,因为 request.body.validate 需要 Int。
但问题是JS客户端从输入字段发送值,输入字段转换为字符串。
处理整数或字符串的最佳方法是什么? (所以这个动作在这两种情况下都应该将 json 转换为 dto)
【问题讨论】:
标签: json scala playframework playframework-2.2