Что случилось с 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 "";
}
Другие вопросы по тегам