2012-01-27 34 views
4

這是我在做什麼(JAX-RS 1.0,新澤西州1.11):這是UriBuilder的預期行爲嗎?

import javax.ws.rs.core.UriBuilder; 
System.out.println(UriBuilder.fromPath("/").queryParam("x", "%40").build()); 
System.out.println(UriBuilder.fromPath("/").queryParam("x", "100%").build()); 

預計:

/?x=%2540 
/?x=100%25 

但實際輸出爲

/?x=%40 
/?x=100%25 

這是怎麼回事上?什麼是解決方法,如果這是UriBuilder應該如何表現?

+0

%2540是不正確的格式,你的代碼中有40%,而不是40%,會是問題? – kosa 2012-01-27 04:38:12

+0

URLEncoder.encode('%40') - >'%2540'。這就是我在這個例子中的意思。 – yegor256 2012-01-27 04:40:19

+1

是正如javadoc中提到的 – 2012-01-27 05:28:25

回答

2

我很驚訝,但這是它是如何工作:

UriBuilder.fromUri("/").queryParam("x", "{value}").build(/* any text */); 
0

問題可能有從編碼字符串構建URI的額外方法:

從的Javadoc: 版本():在將字符串值「所有的‘%’字符將被編碼的。建立者的狀態不受影響「

buildFromEncoded():」所有字符串值中不包含兩個十六進制數字的%字符都將被編碼。「

URIBuilder.buildFromEncoded()http://jsr311.java.net/nonav/javadoc/javax/ws/rs/core/UriBuilder.html#buildFromEncoded%28java.lang.Object...%29

希望幫助

+0

但我的字符串是**不**編碼。這只是一串隨機字符,有時我們可能會看到'%'字符。不小心他們可能會跟着一些數字。在這種情況下,UriBuilder決定不對它們進行編碼......邏輯是什麼? – yegor256 2012-01-28 00:56:07

相關問題