Resteasy UriBuilder错误编码?

时间:2012-12-04 17:21:37

标签: java rest uri resteasy

我正在尝试使用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 #code创建构建器时使用org.jboss.resteasy.util.Encode#pathEncoding中的pathEncoding映射进行编码。

我的使用不正确或执行不正确吗?

1 个答案:

答案 0 :(得分:1)

由于RestEasy是JAX-RS实施,因此来自fromPath的Oracle documentation

  

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

我认为它不适用于绝对URL,因此我担心答案是您的使用不正确。

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

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