Spring RestTemplate 与站点 Setlist.fm

Spring RestTemplate with site Setlist.fm

我有一个 curl 字符串,例如:

curl -X GET --header 'Accept: application/xml' --header 'x-api-key: KEY' 'https://api.setlist.fm/rest/1.0/search/setlists?artistName=Springsteen&date=03-07-2016&p=1'

请求url是:https://api.setlist.fm/rest/1.0/search/setlists?artistName=Springsteen&date=03-07-2016&p=1

Android 中哪个是正确的 java 工作代码? 我有

RestTemplate restTemplate = new RestTemplate();
Map<String, Object> requestBody = new HashMap<String, Object>();
requestBody.put("artistName", "Springsteen");
requestBody.put("date", "" + dataConcerto);

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("x-api-key", "key");

HttpEntity<String> request = new HttpEntity<String>(requestBody.toString(), headers);

String response = restTemplate.exchange("https://api.setlist.fm/rest/1.0/search/setlists", HttpMethod.GET, request, String.class).getBody();

嗯,问题是 requestBody.toString()。您必须将参数添加为查询字符串参数。例如

final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("x-api-key", "yourkey");

final UriComponentsBuilder b = UriComponentsBuilder.fromHttpUrl("https://api.setlist.fm/rest/1.0/search/setlists");
b.queryParam("artistName", "Springsteen");

final String response = restTemplate.exchange(b.toUriString(), HttpMethod.GET, new HttpEntity<>(headers), String.class).getBody();
System.out.println(response);