Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 区分同一servlet请求中的URI和请求体参数_Java_Rest_Servlets - Fatal编程技术网

Java 区分同一servlet请求中的URI和请求体参数

Java 区分同一servlet请求中的URI和请求体参数,java,rest,servlets,Java,Rest,Servlets,我希望我的API能够在一次调用中设置一系列对象的值。一个看似合乎逻辑的解决方案是让用户在URI的范围内定义,并在请求正文中设置所需的新值。例如,URI将是: /api/horses/?color=brown 在请求主体中,键/值对是 key: color value: red 这将使我们所有的棕色马变成红色 问题是从HttpServletRequest对象获取参数不允许您确定参数是在URI中设置的还是在主体中设置的 也许这里有两个问题: 如果在一次调用中有不同的、普遍接受的RESTful方法

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

/api/horses/?color=brown
在请求主体中,键/值对是

key: color
value: red
这将使我们所有的棕色马变成红色

问题是从HttpServletRequest对象获取参数不允许您确定参数是在URI中设置的还是在主体中设置的

也许这里有两个问题:

  • 如果在一次调用中有不同的、普遍接受的RESTful方法来设置一系列对象的值,那是什么呢
  • 如果可以同时使用URI和请求主体参数,那么如何区分HttpServletRequest对象中的参数
  • 更新:接受的答案说明了如何区分(列举的第二个问题)。为了解决更新一系列值的一般挑战,我决定将更新字段限制为一个,并在路径中指定该字段,这是最好的方法。像这样:

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

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

    您始终可以通过调用以下命令进行区分:

    • HttpServletRequest.getQueryString()
    • HttpServletRequest.getInputStream()
    显然,接下来必须使用URL库来解析查询字符串(JDK中的编码/解码器是可以的),并使用库来解析表单数据,具体取决于编码方式(我记得有一个名为commons codec的Apache项目)

    我会选择最简单的方法来避免名称冲突——例如,在URL参数前面加上过滤器——但这方面没有标准规则