尝试转换bodyToMono <uuid>,POST请求时,Spring WebClient抛出不支持的媒体类型异常

时间:2019-04-24 09:14:48

标签: java post kotlin spring-webclient

我正在尝试使用spring-webclient使用一个api。下面是我的代码。代码在kotlin

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

它在下面抛出错误

  

org.springframework.web.reactive.function.UnsupportedMediaTypeException:bodyType = java.util.UUID不支持内容类型'text / plain; charset = UTF-8'

如果我尝试将其转换为字符串,则工作正常。下面的代码

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"

}

1 个答案:

答案 0 :(得分:0)

您之所以收到该异常,是因为响应内容类型是text/plain;charset=UTF-8,而不是您发布的异常消息中所述的application/json。在异常消息中,它还表示您正在尝试将响应主体解析为UUID。我不确定您为什么要这样做,但它将失败,因为响应正文无法映射到UUID类/对象,但这是另一个问题。

因此,要解决当前的主要问题,需要告诉杰克逊接受text/plain的{​​{1}},为此,需要在application/json方法中设置编解码器在构建exchangeStrategies时。

检查下面的代码,它应该可以解决您的问题。

WebClient