You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Micronaut HttpClient的exchange与retrieve方法有何区别?

Micronaut HttpClient exchange() 与 retrieve() 方法差异
  • 返回内容粒度不同
    exchange() 会返回完整的 HttpResponse<T> 对象,包含响应状态码、响应头、响应体等所有HTTP响应信息。你可以通过这个对象获取状态码(response.status())、响应头(response.headers())等元数据,同时获取响应体。示例代码:

    HttpResponse<User> response = client.exchange("/users/1", User.class).block();
    HttpStatus status = response.status();
    User user = response.body();
    

    retrieve() 则直接返回响应体的内容(T 类型),跳过了响应元数据的封装,只返回你需要的业务数据。示例代码:

    User user = client.retrieve("/users/1", User.class).block();
    
  • 错误处理逻辑不同
    exchange() 不会对非2xx状态码做特殊处理,无论响应是4xx(客户端错误)还是5xx(服务端错误),都会正常返回对应的 HttpResponse 对象,需要你手动判断状态码来处理错误场景。
    retrieve() 默认会将非2xx状态码转换为 HttpClientResponseException 抛出,你需要通过捕获该异常来处理错误,比如获取错误状态码、错误响应体等。

  • 适用场景不同
    exchange() 适合需要访问响应元数据的场景,比如根据响应头做后续逻辑、处理不同状态码的分支业务(如3xx重定向、401权限处理等)。
    retrieve() 适合只关心响应体内容的简单请求场景,代码更简洁,无需处理额外的响应对象封装。

内容的提问来源于stack exchange,提问作者frblazquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:52:01