Java 小服务程序 : Differentiate between GET and POST

标签 java http servlets jakarta-ee

是否有可靠的方法使用 HttpServletRequest 分别提取 GETPOST 参数?

也就是说,将查询字符串 (GET) 中发送的参数与请求正文 (POST) 中发送的参数区分开来,假设 Content -类型:application/x-www-form-urlencoded

示例

POST /path HTTP/1.1
Host: test.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42

first_name=posted_foo&last_name=posted_bar

我想以两个变量结束,一个包含来自 URL 的值,另一个包含来自请求正文的值:

get = {"first_name": "foo", "last_name": "bar"}
post = {"first_name": "posted_foo", "last_name": "posted_bar"}

我似乎能够提取这些参数的唯一方法是 getParameter* 方法。

  • HttpServletRequest.getParameter:返回单个字符串,往往是 URL (GET) 中提供的值。
  • HttpServletRequest.getParameterValues:返回一个字符串数组,其中包含查询字符串和请求正文中提供的所有值。通过查询字符串传递的那些往往最先出现。但是,如果返回的字符串数组中只有一个值,则无法可靠地确定该值是来自查询字符串还是请求正文。

为了说明,使用 PHP 这些值是通过 $_GET$_POST 超全局变量提供的。

最佳答案

查询字符串很容易解析,因此为您提供了 URI 查询参数名称,而 getParameterNames() 为您提供了整个集合。

用“&”拆分查询字符串,然后用“=”拆分每个标记。 对于每个键和值,执行 URLDecoder.decode()。就这样。

将所有这些 key 放在一组中。如果参数在 uri 查询中,则很有可能它只在那里。如果一定要找post里面是不是也有,其实post表单编码的数据也是这样编码的,只是那个post被消费了所以来不及了。此外,post 也可以是多部分编码,这是非平凡的解码。

最后,奇怪的是您需要这种区别。您能解释一下您寻求这种殊荣的目的是什么吗?

关于Java 小服务程序 : Differentiate between GET and POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49990954/

相关文章:

java - Apache Camel - 拆分和聚合 - 旧交换始终为空

java - 使用 Java poi 4.11 从 Excel 读取

java - Android - Java 服务器还是 Servlet?

java - 下拉功能在 selenium webdriver 中不起作用

java - 我读取 XML 文档 (JDOM),在另一台 PC 上运行时出现异常 java.lang.NoClassDefFoundError

java - 使用 Ajax 进行 Keycloak 身份验证

http - 如何在 heroku 中使用非 www 域?

java - URLConnection setRequestProperty 与 addRequestProperty

java - webcontainer如何知道在客户端发送请求时要调用Servlet的哪个方法?

java - 如何在 Java 中获取不同时区的当前时间?