我正在尝试使用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映射进行编码。
我的使用不正确或执行不正确吗?
答案 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);