【问题标题】:Spring REST URL Encoding Scheme: %20 or + Which one?Spring REST URL 编码方案:%20 或 + 哪一个?
【发布时间】:2010-11-13 03:42:34
【问题描述】:

我制作了一个 Spring REST 应用程序,您可以在其中基于 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”。 - http://en.wikipedia.org/wiki/Percent-encoding

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

我的 Spring REST 自动将 %20 转换为空格。它被正确解释。我正在使用 Spring 3.0.4。当我的 REST 服务遇到 + 时,它会按原样接受。当然当我把validation放到exclude +的时候,确实如预期的那样被排除了。

我是符合标准还是有这样的双重标准?还是客户使用的是古老的方案?

【问题讨论】:

    标签: spring url rest


    【解决方案1】:

    重点是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

    【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2022-01-25
    • 2010-12-10
    • 2018-03-23
    • 2011-04-12
    • 2018-08-10
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多