scala - 如何使用 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()
)。
我可以看到(使用println
)Content-Type
is application/x-www-form-urlencoded
,正如预期的那样,我可以从浏览器的 Network 选项卡中看到请求“参数”(编码的表单值)正在正确发送。
解决方案
问题是我有一个过滤器()javax.servlet.Filter
正在调用getParameterMap
. HttpServletRequest
这正在耗尽InputStream
请求,并且在请求传递到 servlet ( BlockingHttp4sServlet
) 实例之前发生。
在我看来,当它收到一个返回 true时,BlockingHttp4sServlet
应该提出一个(或更具描述性的东西)。(我已经在 Github 上提交了 http4s 项目的问题。)IllegalStateException
InputStream
isFinished