java - 区分同一 servlet 请求中的 URI 和请求正文参数

标签 java rest servlets

我想让我的 API 能够在一次调用中为一系列对象设置值。看似合乎逻辑的解决方案是用户在 URI 中定义范围并在请求正文中设置所需的新值。例如,URI 为:

/api/horses/?color=brown

在请求正文中,键/值对将为

key: color
value: red

这将使我们所有的棕色马变成红色。

问题是从 HttpServletRequest 对象获取参数不允许您确定这些参数是在 URI 还是正文中设置的。

也许这里有两个问题:

  1. 如果存在不同的、普遍接受的 RESTful 方式来在一次调用中对一系列对象设置值,那么它是什么?
  2. 如果可以同时使用 URI 和请求正文参数,那么如何区分 HttpServletRequest 对象中的参数?

更新:接受的答案解决了如何区分(枚举问题的第二个)。为了解决更新一系列值的一般挑战,我认为最好的方法是限制为一个更新字段并在路径中指定该字段。就像这样:

PUT /api/horses/color?from=brown&to=red

最佳答案

所以您的问题是请求行中编码的参数与 POST 正文中编码的参数之间存在名称冲突。

您始终可以通过调用来区分:

  • HttpServletRequest.getQueryString()
  • HttpServletRequest.getInputStream()

显然,你必须使用 URL 库来解析查询字符串(JDK 中的编码/解码器是可以的)和表单数据的库,具体取决于编码(我记得一些名为 commons-codec 的 Apache 项目这个)。

我会采用最简单的避免名称冲突的方法 - 例如,在 URL 参数前加上 filter- 前缀,但对此没有标准规则。

关于java - 区分同一 servlet 请求中的 URI 和请求正文参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35657598/

相关文章:

java - 如何使用 JAX-RS 返回实际的 html 文件

javascript - 将编码后的 url 作为参数传递 javascript 函数

tomcat - org.apache.catalina.core.StandardContext startInternal 严重 : Error listenerStart

java - 在 apache tomcat 7 中监听上下文路径的变化

java - Jetty.util.MultiMap 抛出 ConcurrentModificationException

java - 不可序列化异常 - 组布局

c++ - 如何使用 C++ 语言和 JSON Parser 创建 Restful Web 服务

reactjs - React - 获取多个 api

java - 如何使用JNA访问Java代码中的DLL方法?

java - 如何在 aws linux 机器上为 tomcat 服务器安装 ssl 证书