首页 > 解决方案 > 如何使用 http4s 处理基本的表单提交?

问题描述

我不敢相信这不在http4s 文档中,而且我能够在线挖掘的示例代码(在浏览了足够长的时间以发现UrlForm该类之后)对我不起作用。

相关的代码如下所示:

case req @ POST -> Root / "compose" =>
  req.decode[UrlForm] { ps =>
    println("ps.values: " + ps.values)
    val content = ps.getFirstOrElse("content",
      throw new IllegalStateException("No content given!"))
    // Do something with `content`...
  }

提交关联表单时,IllegalStateException会抛出 。ps.values是一个空地图 ( Map())。

我可以看到(使用printlnContent-Typeis application/x-www-form-urlencoded,正如预期的那样,我可以从浏览器的 Network 选项卡中看到请求“参数”(编码的表单值)正在正确发送。

标签: scalahttphttp4s

解决方案


问题是我有一个过滤器()javax.servlet.Filter正在调用getParameterMap. HttpServletRequest这正在耗尽InputStream请求,并且在请求传递到 servlet ( BlockingHttp4sServlet) 实例之前发生。

在我看来,当它收到一个返回 true时,BlockingHttp4sServlet应该提出一个(或更具描述性的东西)。(我已经在 Github 上提交了 http4s 项目的问题。)IllegalStateExceptionInputStreamisFinished


推荐阅读