Spring webclient выдает неподдерживаемое исключение медиатипа при попытке преобразовать bodyToMono<UUID>, POST-запрос

Я пытаюсь потреблять API с помощью Spring-WebClient. ниже мой код. код находится в kotlin

webClient.post()
.uri(“some url”)
.body(Mono.just(request))
.retrieve()
**.bodyToMono<UUID>()**
.awaitSingle()

ниже выдает ошибку

org.springframework.web.reactive.function.UnsupportedMediaTypeException: тип содержимого 'text/plain;charset=UTF-8' не поддерживается для bodyType=java.util.UUID

Если я пытаюсь преобразовать в строку, это работает нормально. код ниже

webClient.post()
.uri(“some url”)
.body(Mono.just(request))
.retrieve()
**.bodyToMono<String>()**
.awaitSingle()

Ответ, который я ожидаю от API, ниже

"response": {
"headers": {
  "Content-Type": "text/plain;charset=UTF-8"
},
"status": 200,
"body": "6ea4c979-5e05-4e72-9007-c4644bef5672"

}

0 ответов

Вы получаете это исключение, потому что тип содержимого ответа text/plain;charset=UTF-8 и нет application/jsonкак указано в опубликованном вами сообщении об исключении. В сообщении об исключении также говорится, что вы пытаетесь разобрать тело ответа на UUID. Я не уверен, почему вы хотите это сделать, и это не удастся, потому что тело ответа не может быть сопоставлено с классом / объектом UUID, но это другая проблема.

Итак, чтобы решить вашу основную проблему на данный момент, вам нужно попросить Джексона принять text/plain как это было application/json и для этого вам нужно установить кодек в exchangeStrategies метод при построении uo WebClient.

Проверьте код ниже, он должен решить вашу проблему.

WebClient.builder()
                .baseUrl(BASE_URL)
                .clientConnector(new ReactorClientHttpConnector(httpClient))
                .exchangeStrategies(ExchangeStrategies.builder().codecs(this::acceptedCodecs).build())
                .build();


private void acceptedCodecs(ClientCodecConfigurer clientCodecConfigurer) {
        clientCodecConfigurer.customCodecs().register(new Jackson2JsonEncoder(new ObjectMapper(), TEXT_HTML));
        clientCodecConfigurer.customCodecs().register(new Jackson2JsonDecoder(new ObjectMapper(), TEXT_HTML));
    }
Другие вопросы по тегам