无法在scalatra中的`params`中获取HTTP POST参数

时间:2014-03-28 19:54:42

标签: scala http-post scalatra

我正在使用sbt版本scalatra 2.2运行0.13.0并使用其内置服务器(jetty)。我在kubuntu 13.10 64 bit和我的java版本1.7.0_51上运行。我正在使用OpenJDK 64-Bit。在我的示例应用中,我可以通过GET获得params参数,但我无法获得POST个参数。我检查了request.body,它显示我正在发送这些参数。 我的GET代码看起来像这样

get("/requests") {
    val typ = params.getOrElse("type", null)
    Map(
        "success" -> true,
        "respones" -> responses.get(typ)
      )
  }

这很有效。

我的POST代码如下所示

post("/user/register") {
   val typ = params.getOrElse("type", null) // here typ is always null even when i send type as formdata
   if (typ == null) {
       halt(400, Map("type"-> typ, "body"-> request.body.toString))
   }
   // more code
}

这不起作用。我得到的回应是

{"type":null,"body":"------WebKitFormBoundaryE05sRkwjtB4gBgSW\r\nContent-Disposition: form-data; name=\"type\"\r\n\r\nzombie\r\n------WebKitFormBoundaryE05sRkwjtB4gBgSW--\r\n"}

所以你看到参数type在请求体中存在但在params中为空。 我也尝试了this,但我无法获得POST次请求。有一个github问题here 帮助

1 个答案:

答案 0 :(得分:2)

如果包含FileUploadSupport特性,它将允许您处理多部分表单,因为您的示例显示了表单边界,表明这是问题所在。

包含示例:

import org.scalatra.ScalatraServlet
import org.scalatra.servlet.{FileUploadSupport, MultipartConfig, SizeConstraintExceededException}

class MyApp extends ScalatraServlet with FileUploadSupport {
  configureMultipartHandling(MultipartConfig(maxFileSize = Some(3*1024*1024)))
  // ...
}