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 を組み立てる以外に、どのように修正しますか?