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
相关产品推荐
相关产品推荐

