Java-эквивалент модуля Perl URI :: QueryParam

1

Есть ли эквивалентная библиотека для синтаксического анализа параметров url-запроса в java?

Чтобы проиллюстрировать, что я хочу, отправьте пример кода:

use URI;
use URI::QueryParam;

$u = URI->new("http://www.google.com?a=b&c=d");
print $u->query,"\n";    # prints foo=1&foo=2&foo=3

for my $key ($u->query_param) {
    print "$key: ", join(", ", $u->query_param($key)), "\n";
}

Выход:

а = Ь & с = д

a: b

CD

Мне не нравится писать собственные функции разбора фрагментов запроса.

Теги:
url

2 ответа

1
Лучший ответ

Не совсем так, но близко к:

final URI uri = URI.create(inputString);
final String[] queryParams = uri.getQuery().split("&");

Затем вы снова разделите на "=" каждый элемент queryParams.


ПРИМЕЧАНИЕ. НЕ используйте URLDecoder непосредственно для декодирования значений фрагментов запроса; он превратится + в пробелы, что неверно в соответствии с спецификацией URI (pchar содержит sub-delim содержит + !)

Приближающимся решением будет:

URLDecoder.decode(param.replace("+", "%2b"), "UTF-8")

Чтобы закодировать, используйте Guava UrlPathSegmentEscaper.

Демонстрация: этот простой принцип:

public static void main(final String... args)
    throws UnsupportedEncodingException, URISyntaxException
{
    System.out.println(URLDecoder.decode("a+b", "UTF-8"));
    System.out.println(new URI("http", "foo.bar", "/baz", "op=a+b", null));
    System.out.println(new URI("http", "foo.bar", "/baz", "op=a b", null));
}

печатает:

a b // WRONG!
http://foo.bar/baz?op=a+b
http://foo.bar/baz?op=a%20b
  • 2
    (+1), а затем используйте URLDecoder для декодирования URLDecoder символов, закодированных с использованием% и их кода.
  • 1
    нет, я только что попробовал это getQuery() ничего не декодирует. Он пробовал aaa+bbb и aaa%20bbb и оба вернулись без декодирования. Более того, он даже не может декодировать, потому что URL-адрес не только для HTTP-URL. Он теоретически предназначен для любого типа URL, в то время как такой синтаксис кодирования параметров специфичен для HTTP.
Показать ещё 12 комментариев
1

Что не так с java.net.URL и java.net.URI?

  • 0
    В этом нет ничего плохого, но он дает мне только строку запроса с функцией getQuery. Затем я должен написать свою собственную функцию для ее анализа. Мы также должны помнить, что существуют параметры с несколькими значениями.
  • 0
    @DavidMichaelGang, взгляните на ответ, данный fge, и мой комментарий к его ответу. Это дает вам полное решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню