2012-12-04 45 views
3

我想從一個字符串url使用UriBuilder從RestEasy創建一個URI,我收到了一些意想不到的結果。我正在運行以下一段代碼。Resteasy UriBuilder編碼不正確?

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#pathEncoding中的pathEncoding映射進行編碼。

我的用法不正確或執行不正確?

回答

1

由於RestEasy是JAX-RS實現,從fromPath甲骨文documentation

創建代表一個相對 URI從URI路徑初始化的新實例。

我認爲這不是絕對的URL,因此恐怕答案是您的使用不正確。

你需要像this(沒有雖然測試)

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

是,這種方法奏效。謝謝!這不是絕對或相對的URL,只是如果有查詢參數,問號也被編碼,並且不起作用。 – Saket

+0

謝謝,很高興聽到,歡迎來到stackoverflow :) –