Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
Spring REST URL编码方案:%20或+;哪一个?_Spring_Url_Rest - Fatal编程技术网

Spring REST URL编码方案:%20或+;哪一个?

Spring REST URL编码方案:%20或+;哪一个?,spring,url,rest,Spring,Url,Rest,我制作了一个SpringREST应用程序,您可以在其中基于POST、PUT、GET、DELETE等HTTP方法执行CRUD操作。我有一个典型的URI模板 http://host/root/{id}/{name}/{address} and etc. 我们有一个客户端正在访问此REST服务。显然,他们正在以以下形式发送多字名称和地址的参数: http://host/root/11/John+Smith/10+Las+Vegas+USA 他们使用基于application/x-www-form-

我制作了一个SpringREST应用程序,您可以在其中基于POST、PUT、GET、DELETE等HTTP方法执行CRUD操作。我有一个典型的URI模板

http://host/root/{id}/{name}/{address} and etc.
我们有一个客户端正在访问此REST服务。显然,他们正在以以下形式发送多字名称和地址的参数:

http://host/root/11/John+Smith/10+Las+Vegas+USA
他们使用基于application/x-www-form-urlencoded类型的HTML编码方案。根据维基百科上的文章

应用程序/x-www-form-urlencoded 类型

默认情况下使用的编码是基于 关于《将军》的早期版本 URI百分比编码规则,带有 修改次数,例如 换行规范化与替换 用“+”代替“%20”的空格-

但是,标准的URL编码方案似乎是使用%20替换URI模板中的空格。哪一个是正确的

我的Spring REST会自动将%20转换为空格。它被正确地解释了。我正在使用Spring3.0.4。当我的REST服务满足+时,它将按原样接受。当然,当我将validation设置为exclude+时,它确实像预期的那样被排除


我是在标准之内还是有这样的双重标准?或者客户使用的是古老的方案

关键是
应用程序/x-www-form-urlencoded
只能在请求参数中使用,而在路径中也支持百分比编码

所以

http://host/root/11/?name=John+史密斯&地址=10+拉斯维加斯+美国 很好,将由Spring MVC正确解码,但是

http://host/root/11/John+Smith/10+Las+Vegas+USA http://host/root/11/John+史密斯/10+拉斯维加斯+拉斯维加斯+美国 是错误的,Spring MVC不会对其进行解码,因为应该使用以下表单:

http://host/root/11/John%20Smith/10%20Las%20Vegas%20USA
http://host/root/11/John%20Smith/10%20Las%20Vegas%20USAThanks 请回答。我就是这么想的。与Spring MVC相反使用Spring REST时使用的格式“”是正确的。使用Spring MVC“”是正确的。就Spring MVC而言,格式“”也是正确的。现在,当我告诉另一位程序员我们有一个REST服务时,他为什么假设使用application/x-www-form-urlencoded的编码方案,该方案将空格转换为“+”。这不是一个标准术语吗?还是我错误地认为他们知道?或者是我做出了错误的假设? http://host/root/11/John%20Smith/10%20Las%20Vegas%20USA