【问题标题】:Getting parameters from PUT HttpServletRequest? [duplicate]从 PUT HttpServletRequest 获取参数? [复制]
【发布时间】:2012-12-06 09:26:54
【问题描述】:

我有一个试图处理 PUT 请求的 HttpServlet,它有一些表单参数(使用“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());
}

即使我传入参数,参数的大小也是 0。

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

【问题讨论】:

  • 客户端的 PUT 怎么样?您是否使用 HTML 表单并使用 method="PUT" 提交?
  • 不,我使用了一个用于测试的 GUI 客户端,以及简单的 CURL 命令
  • @Nathan 你能发布命令吗?

标签: java servlets put


【解决方案1】:

请参阅以下 SO 问题,似乎可以回答您的问题:

Servlet parameters and doPut

【讨论】:

  • 谢谢,该问题中的方法肯​​定有效 - 如果我打印出 inputStream,我会看到我传入的所有参数。知道为什么抓取 parameterMap 不起作用吗?除了设置我需要为 PUT 请求执行的内容类型之外,还有其他事情吗?
  • 我不确定,但我猜这是因为 PUT 方法的语义,即根据规范,PUT 方法要求创建或替换目标资源的状态由请求消息有效负载中包含的表示定义的状态,所以我猜 Content-Type "application/x-www-form-urlencoded" 在 PUT 方法中并没有真正意义。
【解决方案2】:

您必须将它们作为参数放在 URL 上。 PUT 的主体没有 POST 的语义,后者将其解释为表单参数。

【讨论】:

  • 从我的经验看来是这样。
  • @PhilipRego ,来自 RFC。
【解决方案3】:

Spring MVC 提供 FormContentFilter 来解析 PUT、PATCH 和 DELETE 的表单数据并将其公开为 servlet 请求参数

https://docs.spring.io/spring-framework/docs/current/javadocapi/org/springframework/web/filter/FormContentFilter.html

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 1970-01-01
    • 2017-05-01
    • 2011-10-07
    • 2018-02-07
    • 2017-02-07
    • 2020-11-04
    • 2011-07-13
    • 2017-03-21
    相关资源
    最近更新 更多