RestClient 功能介绍、完整使用示例演示, 和RestTemplate、WebClient 对比_java restclient
RestClient功能介绍
RestClient是Spring Framework 6.1版本引入的同步HTTP客户端,旨在替代老旧的RestTemplate
,提供更现代、流畅的API设计。其核心特点包括:
-
流畅API(Fluent API):
支持链式调用,通过方法链接实现自然语言风格的代码,可读性更强[1][4]。RestClient.builder() .baseUrl(\"https://example.com\") .defaultHeader(\"My-Header\", \"Foo\") .build();
-
同步阻塞式通信:
与RestTemplate
类似,RestClient是同步客户端,适用于简单或低并发场景[1][4]。 -
高度可定制:
支持通过builder
配置请求工厂、默认Header、拦截器、消息转换器等[1][7][9]。 -
异常处理:
默认对4xx/5xx状态码抛出异常,但可通过onStatus
自定义处理逻辑[1][4]。 -
兼容RestTemplate:
可直接从RestTemplate
实例创建RestClient,简化迁移[7]。
完整使用示例
1. 创建RestClient实例
RestClient customClient = RestClient.builder() .requestFactory(new HttpComponentsClientHttpRequestFactory()) // 使用Apache HTTP客户端 .defaultHeader(\"My-Header\", \"Foo\") // 全局默认Header .requestInterceptor(myCustomInterceptor) // 添加请求拦截器 .build();
2. 发送GET请求
MyResponse response = customClient.get() .uri(URI.create(\"https://developers.ascendcorp.com\")) // 设置URL .header(\"Correlation\", correlationId) // 动态添加Header .retrieve() // 获取响应 .onStatus(HttpStatusCode::is4xxClientError, (req, res) -> { // 处理4xx错误 throw new MyCustomRuntimeException(res.statusCode(), res.headers()); }) .body(MyResponse.class); // 反序列化响应体
3. 发送POST请求
MyResponse response = customClient.post() .uri(URI.create(\"https://developers.ascendcorp.com\")) // 设置URL .body(request) // 设置请求体(自动序列化JSON) .header(\"my-header-a\", headerA) // 动态添加Header .header(\"my-header-b\", headerB) .retrieve() .toEntity(MyResponse.class) // 获取响应实体 .getBody();
4. 复杂响应处理(使用exchange
)
List<Article> articles = customClient.get() .uri(\"/articles\") .exchange((request, response) -> { if (response.getStatusCode().is204()) { throw new ArticleNotFoundException(); } else if (response.getStatusCode().is200()) { return objectMapper.readValue(response.getBody(), new TypeReference<>() {}); } else { throw new InvalidArticleResponseException(); } });
与RestTemplate、WebClient对比
onStatus
)ResponseErrorHandler
总结
-
RestClient:
- 适用于新项目,尤其是Spring 6.1+环境,提供现代化API设计和同步操作。
- 优势在于代码简洁、可读性强,且兼容
RestTemplate
的配置。
-
RestTemplate:
- 适合旧项目维护或简单同步需求,但API复杂度高,建议逐步迁移至RestClient。
-
WebClient:
- 高并发、响应式场景(如WebFlux)下的首选,支持非阻塞I/O和流式处理,但学习曲线较陡[3][9]。
选择建议:
- 新项目优先使用RestClient,淘汰
RestTemplate
。 - 高并发或响应式架构选择WebClient。
- 现有简单项目可继续使用
RestTemplate
,但不建议长期维护。