我正在尝试使用来自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创建生成器时的字符使用org.jboss.resteasy.util.encode的路径编码映射进行编码。
我的用法不正确还是实现不正确?
最佳答案
因为RestEasy是一个jax-rs实现,来自fromPath
的oracledocumentation:
创建表示从uri路径初始化的相对uri的新实例。
我认为它不是针对绝对url的,因此我担心答案是您的用法不正确。
你需要一些类似this的东西(虽然没有测试)
UriBuilder.fromUri("http://localhost:8190/").
path("{a}").
queryParam("pageNumber", "{pageNumber}").
queryParam("pageSize", "{pageSize}").
build("items", 1,10);