【问题标题】:Resteasy UriBuilder incorrectly encodes?Resteasy UriBuilder 编码不正确?
【发布时间】:2012-12-04 17:21:36
【问题描述】:

我正在尝试使用来自 RestEasy 的 UriBuilder 从字符串 url 创建一个 URI,但我得到了一些意想不到的结果。我正在运行以下代码。

UriBuilder uriBuilder = UriBuilder.fromPath("http://localhost:8190/items?pageNumber={pageNumber}&pageSize={pageSize}");

System.out.println(uriBuilder.build(1, 10));

预期结果:

http://localhost:8190/items?pageNumber=1&pageSize=10

实际结果:

http://localhost:8190/items%3FpageNumber=1&pageSize=10

当使用 UriBuilder.fromUri() 而不是 fromPath() 时,它会在创建 URI 时引发异常

Illegal character in query at index 39: http://localhost:8190/items?pageNumber={pageNumber}&pageSize={pageSize}

第 39 位的字符是 {。

我不想解析完整的字符串来部分地创建 URI。

我查看了 RestEasy 代码,它正在编码“?”使用 org.jboss.resteasy.util.Encode#encode 使用来自 org.jboss.resteasy.util.Encode#pathEncoding 的 pathEncoding 映射创建构建器时的字符。

是我的用法不正确还是实现不正确?

【问题讨论】:

    标签: java rest uri resteasy


    【解决方案1】:

    由于RestEasy 是一个JAX-RS 实现,来自fromPath 的Oracle documentation

    创建一个表示从 URI 路径初始化的相对 URI 的新实例。

    我认为它不适用于绝对 URL,因此恐怕答案是您的用法不正确。

    你需要this 之类的东西(虽然没有测试)

    UriBuilder.fromUri("http://localhost:8190/").
      path("{a}").
      queryParam("pageNumber", "{pageNumber}").
      queryParam("pageSize", "{pageSize}").
      build("items", 1,10);
    

    【讨论】:

    • 是的,这种方法奏效了。谢谢!这与绝对或相对 URL 无关,只是如果有查询参数,问号也会被编码并且不起作用。
    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多