在同一个servlet请求中区分URI和请求主体参数

时间:2016-02-26 17:03:28

标签: java rest servlets

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

/api/horses/?color=brown

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

key: color
value: red

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

问题是从HttpServletRequest对象获取参数不能让您确定参数是在URI还是正文中设置。

也许这里有两个问题:

  1. 如果在一次通话中有不同的,通常接受的RESTful方式来设置一系列对象的值,它是什么?
  2. 如果同时使用URI和请求正文参数,那么如何区分HttpServletRequest对象中的那些?
  3. 更新:接受的答案解决了如何区分(第二个列举的问题)。为了解决更新一系列值的一般挑战,我决定通过仅限制一个更新字段并指定路径中的字段来最好地实现这一目标。像这样:

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

1 个答案:

答案 0 :(得分:2)

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

您可以随时致电:

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

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

我选择了没有名字冲突的最简单路线 - 例如,在网址参数前加上过滤器 - ,但没有标准规则。