控制器中=的意外解码

时间:2013-10-17 14:39:13

标签: encoding playframework

从前端开始,我正在使用以下数据执行jQuery POST

[{name: "Kevin", age: 100, favoriteOperator:"="}]

此POST会点击/sample网址。

在我的控制器中,我使用以下方式阅读POST的正文:

  def submit = Action { implicit request => 
 val maybeRequestAsFormUrlEncoded: Option[Map[String, Seq[String]]] =  
                        request.body.asFormUrlEncoded

打印出地图显示:  Map([{"name" : "Kevin", "age" : 100, "favoriteOperator" :" -> List("}])

为什么我的favoriteOperator显示为" -> List("而不是"="

1 个答案:

答案 0 :(得分:1)

非常确定asFormUrlEncoded期望输入如下:

queryString=abc,def
anotherQueryString=blabla

然后转换为您的地图:

Map("queryString" -> List("abc", "def"), "anotherQueryString" -> List("blabla"))

(我实际上不确定abc,defblabla是否真的被反序列化为一个列表,这个想法就是因为你的样本中有一个列表而来。无论如何,重要的是asFormUrlEncoded期望键值以=符号分隔,这就是为什么你的字符串被拆开的原因。另见http://en.wikipedia.org/wiki/Url_encoding

您可能希望查看Json反序列化器,因为您的请求具有Json格式: http://www.playframework.com/documentation/2.2.x/ScalaJson