Spring RestTemplate выдает IllegalArgumentException: недопустимый URL-адрес HTTP

java.lang.IllegalArgumentException: [https://localhost/pcap/search?stime=20110930%2E000000&etime=20110930%2E235959&bpf=tcp

Вот вызов, который я сделал с использованием шаблона Spring RestFul:

final PcapSearchResponse pcapSearchResult = restTemplate.postForObject(
    nPulseApiUris.get(2), null, PcapSearchResponse.class, sTime, eTime, bpf);

Я не понимаю, почему это плохой URL? Я использовал UTF-8 для кодирования "." символ, но я не уверен, почему мой URL-адрес все еще недействителен.

Ваша помощь очень ценится!

Спасибо за помощь!!!


person W L    schedule 20.10.2011    source источник


Ответы (1)


В документации RestTemplate упоминается, что:

Кроме того, методы с аргументом String предполагают, что строка URL-адреса не закодирована.

Итак, при передаче URL-адреса в виде строки не кодируйте его. Весна позаботится об этом.

person Bozho    schedule 20.10.2011
comment
Привет Божо, большое спасибо за ваш ответ. Да, я не кодировал URL. URL выглядит следующим образом в моем коде, в котором nPulseApiUris имеет тип List‹String›: https://localhost/pcap/search?stime={stime}&etime=${etime}&bpf=${bpf} Мы очень признательны за вашу помощь! - person W L; 21.10.2011
comment
Привет @Божо, я очень ценю твой ответ. Параметры моего запроса, которые я пытаюсь опубликовать в сервисе RESTful URI https://localhost/pcap/searchare: stime=20110930.000000 etime=20110930.235959 bpf=tcp Большое спасибо, Божо! - person W L; 22.10.2011
comment
Выглядит нормально. Теперь избавься от усилителя - person Bozho; 22.10.2011
comment
Если я избавлюсь от амперсанда, я не уверен, как я отправлю эти параметры в URI службы RESTful. Поэтому я подумал, что если я добавлю его, это сработает. Спасибо за помощь!! - person W L; 23.10.2011
comment
Не удаляйте весь ампераснд, но и не записывайте его закодированным. Итак, & вместо & - person Bozho; 23.10.2011
comment
Привет @Bozho: Когда я это сделал, Spring выдает состояние исключения, что он не распознает этот символ как допустимый символ. - person W L; 23.10.2011
comment
для записи - можете ли вы попробовать без амперсандов и посмотреть, сохраняется ли проблема (т.е. предположим, что URL-адрес ../foo/bar, а не ..?a=foo&b=bar - person Bozho; 24.10.2011
comment
Привет @Bozho: Да, пробовал это раньше, и я получаю исключение, говорящее, что он не распознает символ &. - person W L; 26.10.2011
comment
если у вас нет амперсанда, он говорит вам, что не может его распознать? - person Bozho; 26.10.2011
comment
Если у меня нет вместо &, Spring жалуется и говорит, что не может распознать &. - person W L; 29.10.2011
comment
как он жалуется и когда? исключение? - person Bozho; 29.10.2011
comment
да, он жалуется с исключением, говорящим, что он не распознает символ & в URL-адресе. - person W L; 02.11.2011