摘要:RestClient 是Spring Framework 6引入的一个现代化、流式、类型安全的 HTTP 客户端,在Spring Boot 3.2+中可用。它旨在替代较旧的 RestTemplate,更好地适应现代 HTTP 使用模式,并提供更简洁、直观的 A
RestClient 是 Spring Framework 6 引入的一个现代化、流式、类型安全的 HTTP 客户端,在 Spring Boot 3.2+ 中可用。它旨在替代较旧的 RestTemplate,更好地适应现代 HTTP 使用模式,并提供更简洁、直观的 API。
RestClient 是构建在 Spring 的 WebClient 之上的新抽象,但它提供了简化的流式 API——非常适合阻塞式、同步的 HTTP 调用。可以将其视为现代化的 RestTemplate。
确保你使用的是 Spring Boot 3.2+。
@BeanRestClient restClient(RestClient.Builder builder) { return builder .baseUrl("https://api.example.com") .build;}User user = restClient.get .uri("/users/{id}", 1) .retrieve .body(User.class);User user = restClient.get .uri("/users/{id}", 101) .retrieve .body(User.class);User newUser = new User("Arjun", "arjun@bharat.in");User created = restClient.post .uri("/users") .body(newUser) .retrieve .body(User.class);User updated = restClient.put .uri("/users/{id}", 101) .body(updatedUser) .retrieve .body(User.class);restClient.delete .uri("/users/{id}", 101) .retrieve;#5. 使用 ResponseEntity 和 Headers 进行交换ResponseEntity response = restClient.get .uri("/users/{id}", 101) .retrieve .toEntity(User.class);HttpHeaders headers = response.getHeaders;添加请求头
restClient.get .uri("/users") .header("X-Custom-Header", "value") .retrieve .body(User.class);restClient.get .uri("/secure") .headers(headers -> headers.setBearerAuth("token123")) .retrieve .body(SecureData.class);List users = restClient.get .uri("/users") .retrieve .body(new ParameterizedTypeReference> {});#⚠️ 错误处理你可以使用 .onStatus(...) 处理 HTTP 错误
restClient.get .uri("/users/999") .retrieve((request, response) -> { if (response.getStatusCode.is4xxClientError) { throw new UserNotFoundException; } return response.body(User.class); });# 单元测试使用 MockRestServiceServer 进行测试:
MockRestServiceServer mockServer = MockRestServiceServer.bindTo(restClient).build;支持流式期望和验证。
需要简洁的同步 HTTP 调用不想处理响应式编程正在构建现代化的 Spring Boot 3.2+ 应用需要可测试性和可读性来源:码农看看
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!