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

chr*_*ris 7 rest url spring

我创建了一个Spring REST应用程序,您可以在其中执行基于POST,PUT,GET,DELETE的HTTP方法的CRUD操作.我有典型的URI模板

http://host/root/{id}/{name}/{address} and etc.
Run Code Online (Sandbox Code Playgroud)

我们有一个访问此REST服务的客户端.显然,他们以下列形式发送多字名称和地址的参数:

http://host/root/11/John+Smith/10+Las+Vegas+USA
Run Code Online (Sandbox Code Playgroud)

他们使用基于application/x-www-form-urlencoded类型的HTML编码方案.根据维基百科的文章

application/x-www-form-urlencoded类型

默认使用的编码基于一般URI百分比编码规则的早期版本,具有许多修改,例如换行标准化和用"+"而不是"%20"替换空格.- http://en.wikipedia.org/wiki/Percent-encoding

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

My Spring REST自动将%20转换为空格.这是正确的解释.我正在使用Spring 3.0.4.当我的REST服务满足+时,它被接受为原样.当然,当我将验证放到排除+时,它确实被排除在预期之外.

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

axt*_*avt 11

的一点是,application/x-www-form-urlencoded可使用仅在请求参数,而百分之编码在一个路径也支持.

所以,

http://host/root/11/?name=John+Smith&address=10+Las+Vegas+USA

很好,将由Spring MVC正确解码,但是

http://host/root/11/John+Smith/10+Las+Vegas+USA

是错误的,Spring MVC不解码它,因为应该使用以下形式:

http://host/root/11/John%20Smith/10%20Las%20Vegas%20USA