Ошибка bodyToMono WebClient - PullRequest
       7

Ошибка bodyToMono WebClient

0 голосов
/ 29 августа 2018

Я делаю внешний вызов API с помощью Spring 5 WebClient и хотел бы отобразить ответ на объект следующим образом:

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Response {
    private long length;
}

private Mono<Response> getResponse() {
    return webClient.get()
            .uri("someURI")
            .accept(MediaType.APPLICATION_JSON_UTF8)
            .retrieve()
            .bodyToMono(Response.class);
}

Но я получаю ошибку:

org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/octet-stream' not supported

Однако, если я извлекаю тело ответа для String следующим образом:

private Mono<String> getResponse() {
return webClient.get()
        .uri("someURI")
        .accept(MediaType.APPLICATION_JSON_UTF8)
        .retrieve()
        .bodyToMono(String.class); 
}

Тогда все работает правильно. Есть идеи как это решить?

EDIT

Тело ответа:

{
  "blocks": [
  {
  "height": 545551,
  "size": 48289,
  "virtualSize": 48289,
  "hash": "000000000000000000541d265115ec188544420c4b0e5dff6f2171e17e4991c9",
  "time": 1535551238,
  "txlength": 80,
  "poolInfo": {}
  }
  ],
  "length": 1,
  "pagination": {
  "next": "2018-08-30",
  "prev": "2018-08-28",
  "currentTs": 1535587199,
  "current": "2018-08-29",
  "isToday": true,
  "more": true,
  "moreTs": 1535587200
  }
}

Заголовки:

status: 200 OK

1 Ответ

0 голосов
/ 29 августа 2018

Если ответ HTTP не имеет заголовка Content-Type, клиент примет application/octet-stream, который не является типом содержимого, поддерживаемым кодеком Джексона в Spring WebFlux.

Таким образом, поведение, которое вы видите, является ожидаемым, и веб-API должен быть исправлен, чтобы добавить заголовок ответа.

...