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

#java #spring #rest #spring-mvc #resttemplate

#java #spring #rest #spring-mvc #resttemplate

Вопрос:

java.lang.Исключение IllegalArgumentException: [https://localhost/pcap/search?stime=20110930.000000amp;etime=20110930.235959amp;bpf=tcp

Вот вызов, который я сделал, используя Spring RESTful Template:

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

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

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

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

Ответ №1:

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

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

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

Комментарии:

1. Привет, Божо, большое тебе спасибо за твой ответ. Да, я не кодировал URL. В моем коде URL выглядит следующим образом, в котором nPulseApiUris имеет тип List<String>: https://localhost/pcap/search?stime={stime}amp;amp;etime=${etime}amp;amp;bpf=${bpf} Ваша помощь очень ценится!

2. Привет @Bozho, я очень ценю ваш ответ. Параметры моего запроса, которые я пытаюсь отправить в URI RESTful service https://localhost/pcap/search , следующие: stime=20110930.000000 etime=20110930.235959 bpf=tcp Большое вам спасибо, Божо!

3. Выглядит нормально. Теперь избавьтесь от amp

4. Если я избавлюсь от амперсанда, я не уверен, как я собираюсь отправлять эти параметры в URI RESTful service. Поэтому я подумал, что если я добавлю его, это сработает. Спасибо за вашу помощь!!

5. Не удаляйте весь amperasnd, но и не записывайте его в кодированном виде. Поэтому amp; вместо amp;amp;