WebClient 的 bodyToMono 错误
WebClient's bodyToMono error
我正在使用 Spring 5 WebClient 进行外部 api 调用,并希望将响应映射到 Object,如下所示:
@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
但是,如果我像这样将响应 body 提取到字符串:
private Mono<String> getResponse() {
return webClient.get()
.uri("someURI")
.accept(MediaType.APPLICATION_JSON_UTF8)
.retrieve()
.bodyToMono(String.class);
}
然后就正常了。有什么解决办法吗?
编辑:
回应body:
{
"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
}
}
Headers:
status: 200 OK
如果 HTTP 响应没有 Content-Type
header,客户端将假定 application/octet-stream
,这不是 Jackson 编解码器支持的 Content-Type在 Spring WebFlux 中。
所以您看到的行为是预期的行为,网络 API 应该修复以添加响应 header。
我正在使用 Spring 5 WebClient 进行外部 api 调用,并希望将响应映射到 Object,如下所示:
@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
但是,如果我像这样将响应 body 提取到字符串:
private Mono<String> getResponse() {
return webClient.get()
.uri("someURI")
.accept(MediaType.APPLICATION_JSON_UTF8)
.retrieve()
.bodyToMono(String.class);
}
然后就正常了。有什么解决办法吗?
编辑:
回应body:
{
"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
}
}
Headers:
status: 200 OK
如果 HTTP 响应没有 Content-Type
header,客户端将假定 application/octet-stream
,这不是 Jackson 编解码器支持的 Content-Type在 Spring WebFlux 中。
所以您看到的行为是预期的行为,网络 API 应该修复以添加响应 header。