У меня проблема с получением данных из размещенного API AWS с использованием пружин restTemplate.
Ниже приведен мой код
public List<AccountLocation> getCircuitViewRooms(String clientApiKey) {
String uri = circuitApiUrl + "school/rooms?api_key=" + clientApiKey;
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().clear();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
List<AccountLocation> locations = new ArrayList<>();
HttpEntity entity = getHeaders();
ResponseEntity<?> resp = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);
/*if(resp.getStatusCode() == HttpStatus.OK) {
CircuitViewRooms[] rooms = resp.getBody();
for(CircuitViewRooms room : rooms) {
AccountLocation loc = new AccountLocation();
loc.setLocationName(room.getLaundryRooms().getLaundry_room_name());
loc.setLocationId(room.getLocation());
locations.add(loc);
}
}*/
return locations;
}
private HttpEntity<?> getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
headers.add("x-api-key", xApiKey);
return new HttpEntity<>(null, headers);
}
Я получаю ответ 200 OK, но когда он пытается использовать httpMessageConverterExtractor, который выдает org.springframework.http.InvalidMediaTypeException: недопустимый тип mime "method.request.header.Content-Type": не содержит '/'
трассировка стека
at org.springframework.http.MediaType.parseMediaType(MediaType.java:534) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.http.HttpHeaders.getContentType(HttpHeaders.java:924) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.client.HttpMessageConverterExtractor.getContentType(HttpMessageConverterExtractor.java:133) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:90) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:994) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:977) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:736) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:669) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:578) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at com.upp.uppstudentapp.services.laundry.account_services.CircuitViewService.getCircuitViewRooms(CircuitViewService.java:38) ~[main/:na]
Почтальон возвращается, но я также вижу, что тип содержимого в заголовках ответа - "method.request.header.Content-Type"
Я также пытался использовать object.class
Кто-нибудь знает способ обойти это или исправить эту проблему?
Это фрагмент документации для API
Одно заметное отличие заключается в том, что эта реализация имеет возможность производить вывод в формате XML или JSON, тогда как предыдущий API производил только XML. Кроме того, параметры имени метода не используются в этой реализации - полный путь к API определяет применимый метод.
edit 1: добавлены попытки типа содержимого, то же исключение
private HttpEntity<?> getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
headers.add("Content-Type", "application/json");
//headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("x-api-key", xApiKey);
return new HttpEntity<>(null, headers);
}
Также попробовал с setContent.