Я создал следующий простой тест для запроса Itunes:URL Spring RestTemplate getForObject не работает на Apple, ITunes
@Test
fun loadArtist()
{
val restTemplate = RestTemplate()
val builder = UriComponentsBuilder.fromHttpUrl("https://itunes.apple.com/search")
builder.queryParam("term", "howling wolf")
builder.queryParam("entity", "allArtist")
builder.queryParam("limit", 1)
println("\n\nURL ${builder.toUriString()}")
val result = restTemplate.getForObject(builder.toUriString(), String::class.java);
println("Got artist: $result")
}
И выход был неожиданным:
URL https://itunes.apple.com/search?term=howling%20wolf&entity=allArtist&limit=1
Got artist:
{
"resultCount":0,
"results": []
}
Оклейка сгенерированного URL в браузер делает дает ожидаемые результаты - художник вернулся.
https://itunes.apple.com/search?term=howling%20wolf&entity=allArtist&limit=1
Кроме того, жесткое кодирование запроса работает:
val result = restTemplate.getForObject("https://itunes.apple.com/search?term=howling%20wolf&entity=allArtist&limit=1", String::class.java);
. , проблема возникает только для term
запросов, содержащих пробелы.
Что пошло не так? Как собрать URL вручную, как исправить?
Первое, что я сделал, это попытаться использовать «+» вместо этого, но на самом деле это не сработало. –
Удачи в противном случае? – Lukehey
Нет, поскольку это был очень простой случай, который я использовал: 'val term = name.replace (oldChar = '', newChar = '+'); val response = URL ("$ {this.url}? entity = allArtist & limit = 1 & term = $ term"). readText() ', а затем сопоставлен с Jackson. Меня все еще немного беспокоит, что RestTemplate не работает. –