2017-07-17 52 views
0

javax.ws.rs.core.UriBuilder没有正确转义}的javax UriBuilder没有逃脱 '}' 正确

import javax.ws.rs.core.UriBuilder; 
public void test() { 
    final UriBuilder builder = UriBuilder.fromUri("http://host"); 
    builder.path("dir}one"); 
    l.info(builder.toString()); 
} 

将输出http://host/dir}one,留下}转义。

鉴于org.apache.http.client.utils.URIBuilder

org.apache.http.client.utils.URIBuilder; 
public void testApache() { 
    final URIBuilder builder = new URIBuilder(URI.create("http://host")); 
    builder.setPath("dir}one"); 
    l.info(builder.toString()); 
} 

将输出http://hostdir%7Done,逃避}%7D预期。

这是javax.ws.rs.core.UriBuilder的错误吗?

回答

1

根据RFC 3986字符}保留字符,因此不需要进行转义。它可以用%7D逃脱,但这不是必需的。

因此,无论UriBuilder实现正确的行为。

+0

如果你去throught这个[问题]的答案(https://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid),你看到的提及'}'因为无论是不明智的字符或禁止。没有明确的共识,但似乎更明智的选择是逃避它。 – Roland

+1

的确更明智,特别是在考虑处理这种URI的程序时。我更愿意对它进行编码,但不编码它是没有错误的,所以实际上你的代码应该能够处理这样的字符未编码 –