解析表单 Url 编码请求到案例 Class

Parsing Form Url Encoded Request To Case Class

我有一种情况,我收到对我的 Play 服务的请求,形式为 url 编码的内容。但问题是请求中的字段名称与我的案例 class 字段名称不同,那么如何轻松创建我的案例 class 的实例?例如,

有效载荷

To="john"&From="amy"

案例class定义

case class Payload(to : String, from : String)

这不是一个表单,所以我不创建 Form 并使用 bindRequest(即使我认为这不会起作用)。

如果这是 JSON 有效载荷,那么我可以创建自己的读取,但这是 url 形式编码的,所以是否可以创建我自己的等效 "Reads"?

尽管请求不是通过网络表单提交的,但您仍应使用常规表单处理机制处理 application/x-www-form-urlencoded 请求。尝试定义以下模型和映射

  case class Payload(to: String, from: String)

  val form = Form(
    mapping(
      "To" -> nonEmptyText,
      "From" -> nonEmptyText
    )(Payload.apply)(Payload.unapply)
  )

请注意,在表单映射中,字段名称大小写不必与模型中对应的大小写匹配,例如,Toto。重要的是字段顺序和类型。现在使用常规 form.bindFromRequest.

处理请求