2016-02-26 31 views
1

我想通过在单个调用中设置一系列对象上的值来提供我的API。看似合乎逻辑的解决方案是让用户在URI中的范围内定义并在请求主体中设置所需的新值。例如,所述URI是:在同一个servlet请求中区分URI和请求主体参数

/api/horses/?color=brown 

在请求正文,密钥/值对将是

key: color 
value: red 

这将打开所有的褐色马红。

问题是,从HttpServletRequest对象获取参数不会让您确定是否在URI或正文中设置了参数。

也许这里还有两个问题:

  1. 如果有不同的,普遍接受的RESTful方式来设置一个范围对象的值在单呼,是什么呢?
  2. 如果同时使用URI和请求主体参数,那么您如何区分HttpServletRequest对象中的那些参数呢?

更新:接受的答案地址如何区分(的列举的第二个问题)。为了解决更新一系列值的一般挑战,我决定通过限制只更新一个字段并指定路径中的字段来实现这一点。像这样:

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

回答

1

所以你的问题是你在请求行中编码的参数和POST主体中编码的参数之间有名称冲突。

你总是可以通过调用区分:

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

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

我会去没有名称冲突的最简单的路线 - 例如通过在filter-前加URL参数,但没有这方面的标准规则。