【问题标题】:javax UriBuilder doesn't escape '}' correctlyjavax UriBuilder 没有正确转义“}”
【发布时间】:2017-07-17 08:00:48
【问题描述】:

javax.ws.rs.core.UriBuilder 没有正确转义}

import javax.ws.rs.core.UriBuilder;
public void test() {
    final UriBuilder builder = UriBuilder.fromUri("http://host");
    builder.path("dir}one");
    l.info(builder.toString());
}

将输出http://host/dir}one,不转义}

org.apache.http.client.utils.URIBuilder:

org.apache.http.client.utils.URIBuilder;
public void testApache() {
    final URIBuilder builder = new URIBuilder(URI.create("http://host"));
    builder.setPath("dir}one");
    l.info(builder.toString());
}

将输出http://hostdir%7Done,按预期将} 转义为%7D

这是javax.ws.rs.core.UriBuilder 中的错误吗?

【问题讨论】:

    标签: java url uri uribuilder javax.ws.rs


    【解决方案1】:

    根据RFC 3986,字符} 不是保留字符,因此不需要转义。可以使用 %7D 对其进行转义,但这不是必需的。

    所以UriBuilder 的两个实现都能正常运行。

    【讨论】:

    • 如果您仔细阅读此question 的答案,您会看到提到} 是不明智的角色或被禁止的。没有明确的共识,但似乎还是逃避它是更明智的选择。
    • 确实更明智,尤其是在考虑处理此类 URI 的程序时。我也希望对其进行编码,但不对其进行编码也没有错误,因此实际上您的代码应该能够处理此类未编码的字符
    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2021-02-10
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多