Обмен шаблонами отдыха завершается неудачно из-за недопустимого типа содержимого ответа - PullRequest
0 голосов
/ 09 января 2020

У меня проблема с получением данных из размещенного 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.

1 Ответ

0 голосов
/ 09 января 2020

setContentType ожидайте MediaType, для JSON добавьте:

headers.setContentType(MediaType.APPLICATION_JSON);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...