当前位置: 首页 > 知识库问答 >
问题:

WebClient的bodyToMono错误

晋鹤轩
2023-03-14

我正在使用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

但是,如果我像这样将响应正文提取到字符串:

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

然后它就正常工作了。有什么办法解决这个问题吗?

编辑:

响应正文:

{
  "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个答案

雍焱
2023-03-14

如果 HTTP 响应没有内容类型标头,则客户端将假定应用程序/八位字节流,这不是 Spring WebFlux 中的杰克逊编解码器支持的内容类型。

所以您看到的行为是预期的,web API应该被修复以添加响应头。

 类似资料:
  • 我正在使用HTMLUnit创建scrape网站。我正在使用htmlunit-2.19版本。我知道这是一个重复的问题,但相信我,我尝试了我在谷歌找到的所有解决方案,但我仍然得到了这个例外。请参见以下例外情况 我在谷歌上研究过,我发现了很多关于这个异常的解决方案,我尝试过所有的解决方案,但没有一个解决方案是有效的。 请参阅下面的解决方案,我已经应用 解决方案1 解决方案2: 我找到了其他解决方案,它们

  • 如果我试图转换成字符串,它工作得很好。下面的代码 我期待API的响应如下 }

  • 我在尝试使用“create”创建WebClient实例的线路上收到一个NoClassDefFoundError。尝试了builder(),但仍然是一样的。 请告诉我添加的依赖项有什么问题,以及如何解决这个问题。 我添加的依赖项是 StackTrace:

  • 我想在以下条件下抛出自定义异常: > 如果我得到了json格式的正确错误响应,我想反序列化它,并在onStatus()中抛出名为CommonException的异常 如果作为响应的一部分接收HTML内容或反序列化未成功执行,则我希望抛出GenericeException,这是我在onErrorMap()中创建的 在抛出GenericException时,我希望将从下游响应获得的相同HttpStat

  • 问题内容: 我正在尝试使用Webflux将生成的文件流式传输到另一个位置,但是,如果文件的生成遇到错误,则api返回成功,但是DTO在生成文件而不是文件本身时会详细说明错误。这使用的是非常古老且设计不佳的api,因此请原谅post和api设计的使用。 api调用(exchange())的响应是ClientResponse。从这里,我可以使用bodyToMono转换为ByteArrayResourc

  • 我试图通过使用Java+Spring+WebFlux开始反应性编程。 当我在endpoint上调用时,我得到一个 下面是上的服务层 我还尝试删除和中的concinting,但没有成功。