3

我正在尝试使用来自 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 映射创建构建器时的字符。

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

4

1 回答 1

1

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

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

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

你将需要这样的东西虽然没有测试过)

UriBuilder.fromUri("http://localhost:8190/").
  path("{a}").
  queryParam("pageNumber", "{pageNumber}").
  queryParam("pageSize", "{pageSize}").
  build("items", 1,10);
于 2012-12-04T17:32:36.077 回答