Что случилось с URIUtil.encodePath из commons-httpclient-3.1?
Я хочу сделать то, что описано в вопросе 724043, а именно кодировать компоненты пути URI. Класс, рекомендованный для этого, - URIUtil из Commons HttpClient 3.1. К сожалению, этот класс, похоже, исчез из самой последней версии HttpClient. Класс с аналогичным именем из HttpClient 4.1, URIUtils, не обеспечивает такую же функциональность. Этот класс / метод был перемещен в какую-то другую библиотеку, о которой я не знаю, или он просто исчез? Мне лучше всего скопировать класс из версии 3.1 в мой код или есть более простой способ?
3 ответа
Сопровождающие модуля постановили, что вместо этого вы должны использовать стандартный класс URI JDK:
Причина, по которой URI и URIUtils были заменены стандартным Java URI, была очень проста: никто не хотел поддерживать эти классы.
Существует ряд служебных методов, которые помогают обойти различные проблемы с реализацией java.net.URI, но в противном случае стандартных классов JRE должно быть достаточно, не так ли?
Таким образом, проще всего посмотреть на источник encodePath из версии 3.1 и продублировать то, что он делает в своем собственном коде (или просто скопировать метод / класс в свою кодовую базу).
Или вы могли бы пойти с принятым ответом на вопрос, на который вы ссылались (но, похоже, сначала нужно разбить URL на части):
new URI(
"http",
"search.barnesandnoble.com",
"/booksearch/first book.pdf",
null).toString();
Этого можно добиться с помощью org.apache.http.client.utils.URIBuilder
в httpclient-4.X () следующим образом.
public static String encodePath(final String path) {
if(path.length() == 0)
return "";
else
return new URIBuilder().setPath(path).toString();
}
Вы можете использовать стандартные функции JDK , например
public static String encodeURLPathComponent(String path) {
try {
return new URI(null, null, path, null).toASCIIString();
} catch (URISyntaxException e) {
// do some error handling
}
return "";
}