从PUT HttpServletRequest获取参数?

3

我有一个 HttpServlet 正在尝试处理一个 PUT 请求,其中包含一些表单参数(使用 "application/x-www-form-urlencoded" 头发送)。对于 POST 请求,我有相同的设置正常工作,但由于某些原因,当我请求这些参数时,PUT 请求却没有任何内容:

protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws {
   Map<String,String[]> params = req.getParameterMap();
   System.out.println(params.size());
}

即使我传递参数,params的大小仍为0。

有没有其他方法可以读取PUT请求的参数?


1
你是如何从客户端进行PUT操作的?你是否使用HTML表单并使用method="PUT"提交? - Suresh Kumar
不,我使用了一个GUI客户端进行测试,以及简单的CURL命令。 - Nathan
@Nathan,你能发一下命令吗? - Gobliins
3个回答

4

谢谢,那个问题中的方法确实有效 - 如果我打印出inputStream,我可以看到我传递的所有参数。不知道为什么获取parameterMap不起作用?除了设置内容类型之外,我需要为PUT请求做些什么吗? - Nathan
我不确定,但我猜测这是由于PUT方法的语义,即根据规范,PUT方法请求使用请求消息有效负载中所包含的表示定义创建或替换目标资源的状态,因此我猜想Content-Type“application/x-www-form-urlencoded”与PUT方法无关。 - Suresh Kumar

2

你需要将它们作为参数放在URL上。PUT请求的主体并不像POST那样具有表单参数的语义。


从我的经验来看,这似乎是事实。 - Philip Rego
@PhilipRego 这确实是RFC中的情况。 - user207421

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接