RestClient:Spring Web 同步 HTTP 客户端权威说明文档

从零开始掌握RestClient_HTTP请求处理全解 `RestClient` 是Spring Framework 6.1引入的一个现代化HTTP客户端,它提供了流畅的API来简化RESTful服务的调用。相比传统的 `RestTemplate`,`RestClient` 具有以下特点: - **声明式API**:通过链式调用构建HTTP请求 - **更好的类型安全**:编译时检查减少运行时错误 - **内置异步支持**:原生支持响应式编程 - **可扩展性**:通过拦截器机制支持自定义处理逻辑 `RestClient` 的设计哲学是提供一个简洁、直观且功 阅读详情

作为 Java 后端开发者,你对 RestClient 的关注,反映了你对现代、简洁、类型安全 HTTP 客户端的追求。Spring 6.1 引入的 RestClient 不是 RestTemplate 的简单升级,而是Spring 官方为同步世界设计的下一代 HTTP 客户端,它融合了现代 Java 的函数式风格、类型安全与极简 API,是 RestTemplate 的正式继任者。

以下是一份最标准、最实战、带完整中文注释的 RestClient 详解文档,涵盖其定义、作用、特点、与 RestTemplate 的对比、生产级配置、最佳实践与真实业务示例。


📄 RestClient:Spring 6.1+ 同步 HTTP 客户端权威说明文档

版本:2025年10月
适用对象:Java 后端开发者 / 传统 Spring MVC 架构师
目标:彻底掌握 RestClient 的设计理念、核心能力、配置规范与生产级使用方式


一、RestClient 是什么?

✅ 官方定义(Spring Framework 6.1+)

RestClient 是 Spring 6.1 引入的现代、流畅(fluent)、同步、类型安全的 HTTP 客户端,用于替代已弃用的 RestTemplate。它基于 HttpComponents Client(Apache HttpClient 5)构建,提供链式 API、自动编解码、响应体直接映射、异常统一处理,专为同步阻塞式应用(如 Spring MVC、传统微服务)设计。

🔑 核心定位

  • 不是“异步”客户端:它是为阻塞式编程模型(Spring MVC、定时任务、批处理)量身打造的。
  • 不是“WebClient 的同步版”:它是独立设计的全新 API,与 WebClient 无继承关系。
  • 完全替代 RestTemplate:官方明确声明 RestTemplate 已 @Deprecated,RestClient 是唯一推荐的新方案。
  • 与 Spring MVC 同构:使用相同的 HttpMessageConverter(如 Jackson、Gson),确保请求/响应序列化一致性。

💡 一句话理解:
RestClient = RestTemplate 的现代化重构版 —— 更简洁、更安全、更易测试、更少样板代码。


二、RestClient 有什么作用?

作用说明
✅ 调用外部 REST API如:调用支付网关、短信服务、第三方用户中心
✅ 微服务间同步通信服务 A 同步调用服务 B,等待结果后继续流程
✅ 批处理任务中调用 HTTP如:每天凌晨同步用户数据、导出报表
✅ 定时任务调用外部服务如:每小时拉取汇率、刷新缓存
✅ 与 Spring MVC 无缝集成无需引入响应式依赖,直接在 @RestController 中使用
✅ 自动对象映射Java 对象 ↔ JSON/XML 自动序列化/反序列化
✅ 统一异常处理所有 HTTP 错误(4xx/5xx)自动抛出 RestClientException

✅ 典型场景:
你正在写一个 Spring Boot 3.2 + Spring MVC 的订单系统,需要在用户下单时同步调用风控服务 —— RestClient 就是你的最佳选择。


三、RestClient 的核心特点(与 RestTemplate 对比)

特性RestClientRestTemplate
API 设计✅ 现代 Fluent 链式 API
(restClient.get().uri(...).retrieve().toEntity(...))
❌ 传统方法调用
(getForObject(url, class, args))
类型安全✅ 编译期检查 URI 参数、请求体、响应类型❌ 运行时校验,易出错
是否弃用✅ ✅ ✅ 官方推荐的新标准❌ 已标记为 @Deprecated
底层实现✅ Apache HttpClient 5(高性能、连接池)❌ Apache HttpClient 4(老旧)
异常体系✅ 统一 RestClientException 及子类(ResponseException、RequestException)❌ 多种异常(HttpClientException、RestClientException)
编解码一致性✅ 与 @RestController 使用相同 HttpMessageConverter(Jackson/Gson)✅ 也支持,但配置分散
是否支持异步❌ 否(同步阻塞)❌ 否
是否支持流式❌ 否❌ 否
是否支持 HTTP/2✅ 是(HttpClient 5 支持)✅ 有限支持
是否支持拦截器✅ ClientHttpRequestInterceptor✅ 支持
是否支持重试/熔断❌ 无内置❌ 无内置(需集成 Resilience4j)
是否推荐用于新项目✅✅✅ 官方唯一推荐❌ 禁止用于新项目
学习成本低(API 简洁直观)中(方法繁多,参数易混淆)

🚫 Spring 官方声明:
“RestTemplate 已被弃用,所有新项目应使用 RestClient。”
—— Spring Framework 6.1+ 文档


四、为什么必须使用 RestClient?(不使用会怎样?)

❌ 错误做法:继续使用 RestTemplate(已弃用)

@RestController
public class OrderController {

    @Autowired
    private RestTemplate restTemplate; // ⚠️ 已弃用!未来版本将移除

    @PostMapping("/orders")
    public Order createOrder(@RequestBody OrderRequest request) {
        // ❌ 方法名复杂,参数顺序易错,无编译检查
        ResponseEntity<Order> response = restTemplate.postForEntity(
            "http://risk-service/api/check",
            request,
            Order.class
        );
        return response.getBody();
    }
}

问题:

  • 方法名冗长:postForEntity, getForObject, exchange 等 10+ 种方法。
  • 参数顺序易错:url, request, responseType, uriVariables 混乱。
  • 无类型安全:传错参数类型,编译不报错,运行时崩溃。
  • 官方明确弃用,未来 Spring 版本将删除,项目将无法升级。

✅ 正确做法:使用 RestClient

@RestController
public class OrderController {

    @Autowired
    private RestClient restClient; // ✅ 新标准

    @PostMapping("/orders")
    public Order createOrder(@RequestBody OrderRequest request) {

        // ✅ 简洁、流畅、类型安全、编译期检查
        return restClient
            .post()                             // 1. 指定 HTTP 方法
            .uri("/api/check")                  // 2. 设置 URI(支持路径变量)
            .body(request)                      // 3. 设置请求体(自动序列化为 JSON)
            .retrieve()                         // 4. 发起请求,准备接收响应
            .body(Order.class);                 // 5. 直接反序列化为 Order 对象,自动处理 4xx/5xx
    }
}

✅ 优势:

  • 一行代码完成请求 + 响应 + 异常处理。
  • 所有参数类型在编译期校验。
  • 无需手动处理 ResponseEntity,直接返回业务对象。
  • 官方支持,未来十年安全可用。

五、RestClient 的标准配置(生产级最佳实践)

✅ 配置要点:

  1. 复用 RestClient 实例(线程安全,单例)
  2. 统一配置编码器、超时、重试、日志
  3. 使用 HttpMessageConverters 与服务端一致
  4. 使用 ClientHttpRequestInterceptor 添加全局 Header(如认证)

✅ 配置类示例(Spring Boot 3.2+)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestClient;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.core5.http.io.SocketConfig;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.Duration;

@Configuration
public class RestClientConfig {

    private static final Logger log = LoggerFactory.getLogger(RestClientConfig.class);

    /**
     * 创建全局共享的 RestClient 实例(单例)
     * 配置:连接池、超时、编码器、拦截器
     */
    @Bean
    public RestClient restClient(Jackson2ObjectMapperBuilder jacksonBuilder) {

        // 1. 配置底层 HttpClient(Apache HttpClient 5)
        CloseableHttpClient httpClient = HttpClientBuilder.create()
            .setConnectionManager(new PoolingHttpClientConnectionManager()) // 连接池
            .setDefaultSocketConfig(SocketConfig.custom()
                .setSoTimeout(5000) // 读超时 5s
                .build())
            .setDefaultRequestConfig(RequestConfig.custom()
                .setConnectTimeout(3000) // 连接超时 3s
                .setSocketTimeout(5000)  // 读超时 5s
                .build())
            .build();

        // 2. 配置消息转换器:必须与 @RestController 使用相同的 ObjectMapper
        // 👉 重要!避免 LocalDate、BigDecimal、枚举等类型反序列化失败
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(jacksonBuilder.build()); // ✅ 使用全局 ObjectMapper

        // 3. 创建 RestClient,注入 HTTP 客户端和转换器
        return RestClient.builder()
            .clientHttpConnector(new SpringClientHttpConnector(httpClient)) // 使用 Apache HttpClient 5
            .messageConverters(converter)                                   // 使用统一编码器
            .defaultHeader("User-Agent", "MyApp/1.0")                       // ✅ 全局 Header
            .build();
    }

    /**
     * 创建专门用于调用支付服务的 RestClient(独立配置)
     */
    @Bean
    public RestClient paymentRestClient(Jackson2ObjectMapperBuilder jacksonBuilder) {

        CloseableHttpClient httpClient = HttpClientBuilder.create()
            .setConnectionManager(new PoolingHttpClientConnectionManager())
            .setDefaultSocketConfig(SocketConfig.custom()
                .setSoTimeout(8000) // 支付服务要求更长超时
                .build())
            .setDefaultRequestConfig(RequestConfig.custom()
                .setConnectTimeout(5000)
                .setSocketTimeout(8000)
                .build())
            .build();

        // 添加认证拦截器:所有请求自动携带 API Key
        RestClient restClient = RestClient.builder()
            .clientHttpConnector(new SpringClientHttpConnector(httpClient))
            .messageConverters(new MappingJackson2HttpMessageConverter(jacksonBuilder.build()))
            .defaultHeader("Authorization", "Bearer your-payment-api-key") // ✅ 自动添加认证头
            .build();

        return restClient;
    }
}

✅ 关键配置说明:

  • SpringClientHttpConnector:Spring 提供的适配器,桥接 Apache HttpClient 5 和 RestClient。
  • jacksonBuilder.build():必须使用 Spring Boot 自动配置的 ObjectMapper,否则 @JsonFormat、@JsonSerialize 注解失效。
  • defaultHeader():全局添加 Header(如认证、追踪 ID)。
  • 不要手动创建 ObjectMapper,使用 Jackson2ObjectMapperBuilder。

六、RestClient 最标准、最实用的使用示例(带详细中文注释)

✅ 示例 1:GET 请求 —— 查询用户信息(基础调用)

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;

@RestController
public class UserController {

    @Autowired
    private RestClient restClient; // 注入全局 RestClient

    /**
     * 根据用户 ID 查询用户信息
     * 使用 RestClient 发起 GET 请求,直接返回 User 对象
     * 如果响应为 404,抛出 RestClientResponseException;5xx 抛出 RestClientException
     */
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {

        return restClient
            .get()                            // 1. 发起 GET 请求
            .uri("/api/users/{id}", id)       // 2. 设置 URI,路径变量自动替换(类型安全!)
            .retrieve()                       // 3. 准备接收响应
            .body(User.class);                // 4. 直接反序列化为 User 对象,无需处理 ResponseEntity
        // ✅ 自动处理 200 OK → 返回对象
        // ✅ 自动处理 404 → 抛出 RestClientResponseException
        // ✅ 自动处理 500 → 抛出 RestClientException
    }
}

✅ 优势:

  • 无需写 ResponseEntity<User>。
  • 无需手动 getBody()。
  • 无需 try-catch 处理异常(可统一拦截)。

✅ 示例 2:POST 请求 —— 创建订单并调用风控服务(链式调用)

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;

@RestController
public class OrderController {

    @Autowired
    private RestClient restClient;

    /**
     * 创建订单前调用风控服务进行校验
     * 语义:同步阻塞等待风控结果,通过则创建订单,失败则抛异常
     */
    @PostMapping("/orders")
    public Order createOrder(@RequestBody OrderRequest request) {

        // 1. 调用风控服务(同步阻塞)
        RiskCheckResult riskResult = restClient
            .post()                                 // 1. POST 方法
            .uri("/api/risk/check")                 // 2. URI
            .body(request)                          // 3. 请求体自动序列化为 JSON
            .retrieve()                             // 4. 发起请求
            .body(RiskCheckResult.class);           // 5. 反序列化为响应对象

        // 2. 如果风控拒绝,抛出业务异常
        if (!riskResult.isAllowed()) {
            throw new BusinessException("风控未通过:" + riskResult.getReason());
        }

        // 3. 风控通过,继续创建订单(此处省略本地创建逻辑)
        return new Order(request.getUserId(), request.getAmount(), "CREATED");
    }

    // 👇 辅助类(仅用于示例)
    record OrderRequest(Long userId, Double amount) {}
    record RiskCheckResult(Boolean isAllowed, String reason) {}
    record Order(Long userId, Double amount, String status) {}
}

✅ 关键点:

  • body(request):自动调用 ObjectMapper 序列化为 JSON。
  • .body(RiskCheckResult.class):自动反序列化,类型安全,编译期检查。
  • 代码像普通同步方法一样简单,但底层是高性能 Apache HttpClient 5。

✅ 示例 3:带路径变量和查询参数的复杂请求

@GetMapping("/products")
public Product getProduct(@RequestParam String category,
                          @RequestParam(required = false) Integer minPrice,
                          @RequestParam(required = false) Integer maxPrice) {

    return restClient
        .get()                                      // GET 请求
        .uri("/api/products/{category}", category)  // 路径变量
        .queryParam("minPrice", minPrice)           // 查询参数(自动处理 null)
        .queryParam("maxPrice", maxPrice)           // 查询参数(自动处理 null)
        .retrieve()
        .body(Product.class);
}

✅ 优势:

  • queryParam(key, value):自动跳过 null 值,避免 ?minPrice=null。
  • 所有参数类型安全,编译期检查。

✅ 示例 4:使用拦截器统一添加追踪 ID(生产级日志)

import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;

@Component
public class TraceIdInterceptor implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        // ✅ 为每个请求自动添加追踪 ID(如 X-Trace-ID)
        request.getHeaders().add("X-Trace-ID", TraceContext.getTraceId()); // 假设你有 TraceContext 工具类
        return execution.execute(request, body);
    }
}
// 在配置类中注册拦截器
@Bean
public RestClient restClient(Jackson2ObjectMapperBuilder jacksonBuilder, TraceIdInterceptor traceIdInterceptor) {

    return RestClient.builder()
        .clientHttpConnector(new SpringClientHttpConnector(httpClient))
        .messageConverters(new MappingJackson2HttpMessageConverter(jacksonBuilder.build()))
        .interceptors(traceIdInterceptor) // ✅ 注册拦截器
        .build();
}

✅ 作用:

  • 所有 HTTP 请求自动携带 X-Trace-ID,便于链路追踪(配合 Sleuth/Zipkin)。
  • 无需在每个调用处手动添加 Header。

✅ 示例 5:统一异常处理(全局兜底)

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestClientResponseException;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(RestClientResponseException.class)
    public ResponseEntity<ErrorResponse> handleRestClientError(RestClientResponseException e) {
        log.error("外部服务调用失败,状态码:{},响应体:{}", e.getStatusCode(), e.getResponseBodyAsString(), e);

        ErrorResponse error = new ErrorResponse(
            "EXTERNAL_SERVICE_ERROR",
            "调用外部服务失败:" + e.getMessage(),
            e.getStatusCode().value()
        );

        return ResponseEntity.status(e.getStatusCode()).body(error);
    }

    @ExceptionHandler(RestClientException.class)
    public ResponseEntity<ErrorResponse> handleGeneralError(RestClientException e) {
        log.error("HTTP 客户端错误", e);

        ErrorResponse error = new ErrorResponse(
            "CLIENT_ERROR",
            "网络或客户端错误:" + e.getMessage(),
            500
        );

        return ResponseEntity.status(500).body(error);
    }
}

// 👇 数据模型
record ErrorResponse(String code, String message, int status) {}

✅ 作用:

  • 所有 RestClient 抛出的异常统一被拦截,返回标准错误格式。
  • 无需在每个 Controller 中写 try-catch。

七、RestClient 使用最佳实践(生产环境清单)

类别推荐做法说明
✅ 实例管理单例共享 RestClient不要每次调用 RestClient.create(),浪费资源
✅ 超时配置明确设置 socketTimeout 和 connectTimeout避免服务雪崩,建议 3~8s
✅ 编码器使用 Jackson2ObjectMapperBuilder.build() 构建 ObjectMapper保证与 @RestController 一致,避免日期/枚举反序列化失败
✅ 日志监控使用 @RestControllerAdvice 统一处理 RestClientResponseException避免 500 泛滥,返回结构化错误
✅ 重试机制集成 Resilience4j 或 Spring RetryRestClient 无内置重试,需手动添加 @Retryable
✅ 认证使用 interceptors() 添加全局 Header(如 Authorization)避免重复代码
✅ 测试使用 MockRestServiceServer(Spring Test)模拟 HTTP 响应无需启动真实服务即可测试
❌ 绝对禁止继续使用 RestTemplate官方已弃用,未来版本将移除
❌ 绝对禁止在 RestClient 中使用 .block()RestClient 本身就是同步阻塞,无需 block
❌ 绝对禁止手动创建 ObjectMapper使用 Spring Boot 自动配置的版本

八、RestClient 与 RestTemplate 对比总结表(决策指南)

项目RestClientRestTemplate
是否推荐用于新项目✅✅✅ 必选❌ 禁止
是否已弃用❌(官方推荐)✅(@Deprecated)
API 风格✅ 现代 Fluent 链式❌ 传统方法名繁多
类型安全✅ 编译期检查❌ 运行时校验
底层库✅ Apache HttpClient 5❌ Apache HttpClient 4
异常体系✅ 统一 RestClientException❌ 多种异常
是否支持 Spring Boot 3.x✅✅✅ 完全支持✅ 支持,但不推荐
是否支持 HTTP/2✅ 是✅ 有限支持
是否支持拦截器✅ 是✅ 是
是否支持重试❌ 无内置❌ 无内置
是否适合 Spring MVC✅✅✅ 首选⚠️ 已淘汰
是否适合微服务✅✅✅ 首选❌ 不推荐
学习成本极低中等

🚀 结论:
RestClient 是 Spring 生态中同步 HTTP 客户端的未来。
任何新项目,无论是否使用 WebFlux,只要你是同步阻塞架构,都应优先选择 RestClient。


✅ 附录:RestClient 常用操作速查表

操作方法说明
GET.get()发起 GET 请求
POST.post()发起 POST 请求
PUT.put()发起 PUT 请求
DELETE.delete()发起 DELETE 请求
设置 URI.uri("/path/{id}", id)支持路径变量,自动转义
设置查询参数.queryParam("key", value)自动跳过 null 值
设置请求体.body(obj)自动序列化为 JSON
设置 Header.header("key", "value")单个头
设置多个 Header.headers(h -> h.addAll(...))批量设置
发起请求.retrieve()准备接收响应
获取响应体.body(Class<T>)直接反序列化为对象
获取完整响应.toEntity(Class<T>)返回 ResponseEntity<T>(含状态码、头)
添加拦截器.interceptors(interceptor)全局拦截请求/响应
设置超时通过 HttpClientBuilder 配置RestClient 不直接暴露超时,需配置底层 HttpClient

📌 结语:RestClient 不是“新瓶装旧酒”,而是“现代化的必然”

RestTemplate 是“你用电话簿打电话”——号码多、记不住、容易打错。
RestClient 是“你用微信发消息”——输入自动补全,发送后自动知道对方是否收到。

当你使用 RestClient,你不是在“写 HTTP 请求”,
你是在声明一个类型安全、语义清晰的业务操作:

“请把这份订单发给风控服务,如果它说‘拒绝’,我就抛异常;如果它说‘通过’,我就继续。”

这才是现代 Java 后端开发应有的优雅与自信。

✅ 行动建议:

  1. 立即替换所有 RestTemplate 实例为 RestClient
  2. 统一配置 Jackson2ObjectMapperBuilder 与 HttpMessageConverter
  3. 为每个外部服务创建独立的 RestClient Bean
  4. 为所有请求添加 Trace-ID 拦截器
  5. 为所有异常编写统一的 @RestControllerAdvice
Spring Boot Rest Client 的使用案例 记住,从Spring Boot 2.0开始,WebClient是官方推荐的用于发送异步HTTP请求的工具,因为它提供更加现代和功能丰富的API。这个简单的例子演示了如何通过Spring Boot应用使用RestTemplate来发送HTTP GET请求以及接收响应。在Spring Boot中使用RestTemplate进行REST客户端请求是非常普遍的操作。接下来,您可以在服务类中注入RestTemplate Bean,并通过它发送HTTP请求。 阅读详情

相关推荐

智能车实战——极速越野组GPS与惯导融合定位导航全解析

本文深入解析了智能车极速越野组中GPS与惯导模块的融合定位导航技术。通过对比GPS的全局定位与惯导的高频姿态感知,详细阐述了如何利用MM32SPN27主控,将两者数据融合以实现精准、实时的车辆控制。内容涵盖硬件选型、软件数据处理、PID控制及系统调试等实战环节,为智能车开发者提供了一套完整的解决方案。

pz8901234的博客 1201

Spring之RestClient、WebClient和HTTP Interface

文章目录1 RestClient1.1 介绍1.2 准备项目1.2.1 pom.xml1.2.2 创建全局 RestClient1.2.3 Get接收数据 retrieve1.2.4 结果转换 Bean1.2.5 Post发布数据1.2.6 Delete删除数据1.2.7 处理错误1.2.8 Exchange 方法 1 RestClient 1.1 介绍 Spring 框架一直提供了两种不同的客户端来执行 http 请求: RestTemplate:它在 Spring 3 中被引入,提供同步的阻塞式通信。

上善若泪 4944

为什么桥式传感器(Bridge Sensor)需要用到仪表放大器?

仪表放大器在桥式传感器的应用里起到关键作用,本文介绍桥式传感器的原理、特性,以及信号调理过程,并附上了一个 TINA - TI 的仿真电路。

疯狂的运放 1526

Spring6.0新特性-RestClient:使用更友好的Http客户端

spring6.0官方推出了一个全新的HTTP客户端RestClient它是一个同步HTTP客户端,它提供了一个现代的、流畅的API。提供了对HTTP库的抽象,允许从Java对象到HTTP请求的方便转换,以及从HTTP响应创建对象。

秃了也弱了 2749

在边缘部署实时视觉应用程序

克隆代码库后,压缩源文件夹的内容,并将生成的存档文件上传到上一节中创建的 S3 存储桶中。在本教程中,我们将使用 AWS Greengrass,因为它支持大多数 Windows 和 Linux 设备,包括我们的目标 Jetson AGX Xavier。此外,模型还可以量化到更低的精度,从而加快推理速度,但对于较大的模型,此过程通常较长(约 45 分钟)。本例中的脚本只是启动一个 Bash 环境,切换到解压后的构件目录,最后使用所需的命令行参数运行 Deepstream 应用。每个模型类型都有其独有的格式。

2501_91623519的博客 1281

71、聚二甲基硅氧烷(PDMS)材料模型验证研究

本研究通过实验与数值模拟相结合的方法,系统探究了聚二甲基硅氧烷(PDMS)的力学性能与粘附行为。重点验证了多种超弹性材料模型在不同剥离速率下的适用性,结果表明Ogden N2模型在预测界面韧性和平均剥离力方面误差最小,表现最优。研究涵盖了PDMS的合成、单轴拉伸试验、剥离测试及有限元分析,为PDMS在机械与摩擦学领域的应用提供了可靠的建模依据,并建议在后续模拟中优先采用Ogden模型。

wine的专栏 1051

再见RestTemplate,Spring 6.1新特性:RestClient 了解一下!

RestClient。用一句话来让Spring开发者认识RestClient的话:像WebClient一样具备流畅API的。所以,RestClient的使命就是淘汰已经有14年历史的。关于WebClient和,之前在这篇文章中有详细的介绍。如果您有一定的了解,那么对于RestClient一定可以快速上手。RestClient。

程序猿DD 1925

Ardupilot二次开发(二):自定义mavlivk消息

在下面的文件添加自定义消息的xml定义然后编译固件,会生成相应的消息头文件。

超维空间科技的博客 2312

Spring Boot 3.2 新特性之 RestClient

RestClient 是一个类似于 RestTemplate 的的同步接口调用工具。相比于 RestTemplate 采用的是 template 设计模式,RestClient 采用了 fluent API 风格,简单灵活,易于阅读和维护。

QiHY的专栏 7060

分布式计算Ray框架面试题及参考答案

动态任务图执行引擎是一种能够根据任务之间的依赖关系和运行时的实际情况,动态构建和执行任务图的系统。在 Ray 中,动态任务图执行引擎允许任务在运行时根据数据可用性、计算资源状态等因素,灵活地决定后续任务的执行顺序和方式。对于 AI 应用来说,其往往具有动态性的特点。例如,在深度学习模型的训练过程中,可能需要根据训练的结果动态调整下一轮训练的参数、数据增强方式或者模型结构。动态任务图执行引擎可以很好地支持这些动态需求。它能够根据 AI 应用中各个任务的实时输出和依赖关系,动态地生成和调整任务图。

大模型大数据攻城狮的专栏 1349

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SpringBoot中RestClient端的详解(RestTemplate)

Spring Boot 提供了 RestTemplate 来辅助发起一个 REST 请求,默认通过 JDK 自带的 HttpURLConnection 来作为底层 HTTP 消息的发送方式,使用 JackSon 来序列化服务器返回的 JSON 数据。 RestTemplate 是核心类, 提供了所有访问 REST 服务的接口,尽管实际上可以使用 HTTP Client 类或者 java.net....

fsy9595887的博客 7118

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[Spring Boot 3新特性] Spring boot 3新Rest客户端RestClient

在Spring项目中,我们往往使用RestTemplate、HttpClient、OkHttp实现远程服务的调用。随着Spring 6 和 Spring Boot 3版本的发布,Spring 6.1 M2 版本引入了RestClient客户端,并且在官方文档中强烈建议使用。

wxy10309989的博客 4841

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring新一代RestClient

Hello大家好,发现一个Spring好玩RestClient工具。一个可以替换RestTemplate的工具,而且还是Spring自带的。版本都写在代码里了。

qq_27408211的博客 509

挥别Feign,拥抱Spring 6.1 RestClient:高可用HTTP客户端构建之路

《基于Spring6.1 RestClient构建高可用声明式HTTP客户端》 摘要: 随着微服务架构的普及,远程服务通信成为系统设计的关键环节。本文探讨了从传统Feign客户端向Spring6.1 RestClient迁移的技术方案。RestClient作为Spring6.1引入的新型HTTP客户端,具有API简洁、扩展性强、性能优异等特点。文章详细对比了Feign与RestClient的特性差异,提供了从项目创建、依赖配置到接口定义的全流程迁移指南,重点介绍了负载均衡集成、连接池优化和错误重试机制等高级

m0_73978383的博客 1574

Spring6.1新特性,四种方式调用REST接口(RestClient、WebClient、RestTemplate、HTTP Interface)

SpringFramework为REST调用提供了多种选择:同步的RestClient、非阻塞的WebClient、传统的RestTemplate和注解驱动的HTTPInterface。其中,RestClient和WebClient提供了丰富的定制化选项和简洁的使用方式,官方推荐使用RestClient替换RestTemplate。HTTPInterface允许将HTTP服务定义为Java接口,并支持各种注解。在Spring6.1后,进行REST调用更加简单方便。

wnhyang的博客 2041

Spring Boot中使用Swagger CodeGen生成REST client

文章目录什么是Open API规范定义文件呢?生成Rest Client在Spring Boot中使用API Client 配置使用Maven plugin在线生成API Spring Boot中使用Swagger CodeGen生成REST client Swagger是一个非常好用的API工具,我们会使用Swagger来暴露API给外界测试,那么有没有简单的办法来生成对应的调client呢? ...

程序那些事 1万+

Spring Boot 3 RestClient 完整教程

RestClient 是 Spring Framework 6 引入的新的 HTTP 客户端。 作为 RestTemplate 的现代替代方案,提供了更简洁的 API、更好的响应式支持和函数式编程风格。 在 Spring Boot 3 中,RestClient 成为了推荐的 HTTP 客户端选择。

桃李不言下自成蹊 2976

Spring Rest Client之RestTemplate

本篇文章将介绍如何使用RestTemplate,需要注意的是新版的spring framework,由于有WebFlux的加持,Spring提供了一个新版的Rest Client,叫做WebClient,用来替代RestTemplate,。如果你在构建一个新的服务或者在进行系统升级,考虑使用WebClient,

aioulaoda的博客 938

Java-Class-C:org.springframework.web.client.RestTemplate

ylbtech-Java-Class-C:org.springframework.web.client.RestTemplate 1.返回顶部 1、 org.springframework.web.client 类RestTemplate java.lang.Object继承 org.springfra...

weixin_30344131的博客 563

springboot3 RestClient、HTTP 客户端区别

RestClient是中引入的同步 HTTP 客户端,它取代了。同步 HTTP 客户端以阻塞方式发送和接收 HTTP 请求和响应,这意味着它会等待每个请求完成后才继续下一个请求。本文将带你了解RestClient的功能以及它与的比较。

游王子og的博客 1457

Spring Boot3远程调用工具RestClient

Spring Boot3.2之后web模块提供了一个新的远程调用工具RestClient,它的使用比RestTemplate方便,开箱即用,不需要单独注入到容器之中,友好的rest风格调用。下面简单的介绍一下该工具的使用。

fengchengwu2012的博客 1123

restTemplate.postForEntity 调用报错问题解决

restTemplate调用报错

yinbaicheng的专栏 3311

Spring 官宣正式弃用 RestTemplate

并在后续版本中逐步移除。这意味着伴随开发者十余年的经典 HTTP 客户端,终于要走向历史舞台的终点。

m0_69632475的博客 1016
上一篇: WebClient:Spring WebFlux 响应式 HTTP 客户端权威说明文档
下一篇: Spring Boot 事件监听机制完整开发指南
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值