当前位置: 首页 > news >正文

辽宁沈阳建设工程信息网站自学网站开发百度云资源

辽宁沈阳建设工程信息网站,自学网站开发百度云资源,wordpress主题模板开发,企业解决方案图片在上一篇文章《Spring Boot 项目高效 HTTP 通信#xff1a;常用客户端大比拼#xff01;》里#xff0c;我们提到了RestTemplate#xff0c;它是Spring框架提供的Http客户端#xff0c;在springboot项目开发过程中#xff0c;属于使用最为广泛的 HTTP 客户端之一了。今天…在上一篇文章《Spring Boot 项目高效 HTTP 通信常用客户端大比拼》里我们提到了RestTemplate它是Spring框架提供的Http客户端在springboot项目开发过程中属于使用最为广泛的 HTTP 客户端之一了。今天我们就来深入探究一下 RestTemplate 的源码。 在 RestTemplate 处理 HTTP 请求的过程中涉及到五个核心的方法。 1. httpEntityCallback(Object requestBody, Type responseType)用于处理HTTP请求的回调其中包含请求体和预期的响应类型。 2. responseEntityExtractor(Type responseType)用于根据给定的responseType从HTTP响应中提取数据。 3. execute(String url, HttpMethod method, RequestCallback requestCallback, ResponseExtractorT responseExtractor, Object... uriVariables)方法 这个方法在 RestTemplate 的 HTTP 操作流程里扮演着核心的角色。 作用 它负责协调各个组件来执行一个完整的 HTTP 请求并处理相应的响应。 实现 调用了doExecute()方法来执行实际的HTTP请求其中包含请求方法如GET、POST等、请求回调、响应提取器等参数。这里的 doExecute () 方法就像是一个幕后的执行者它接受请求方法、请求回调、响应提取器等重要参数。当 execute 方法将这些参数传递给 doExecute () 方法时就启动了整个 HTTP 请求的执行流程。 这一设计模式体现了分层和职责分离的思想execute 方法作为对外的接口负责接收和整理请求相关的参数而 doExecute () 方法则专注于实际的请求执行操作。 4. doExecute(URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractorT responseExtractor) 下面是 doExecute 方法的具体实现代码 protected T T doExecute(URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractorT responseExtractor) throws RestClientException {Assert.notNull(url, url must not be null);Assert.notNull(method, method must not be null);ClientHttpResponse response null;String resource;try {// 核心逻辑ClientHttpRequest request this.createRequest(url, method);if (requestCallback ! null) {requestCallback.doWithRequest(request);}// 核心方法,调用了executeInternal实现具体的处理逻辑。response request.execute();this.handleResponse(url, method, response);if (responseExtractor ! null) {Object var14 responseExtractor.extractData(response);return var14;}resource null;} catch (IOException var12) {resource url.toString();String query url.getRawQuery();resource query ! null ? resource.substring(0, resource.indexOf(63)) : resource;throw new ResourceAccessException(I/O error on method.name() request for \ resource \: var12.getMessage(), var12);} finally {if (response ! null) {response.close();}}return resource;}在这个方法中调用了createRequest(URI url, HttpMethod method)创建符合特定要求的请求对象然后通过该对象的execute方法执行请求实际的执行逻辑委托给了executeInternal方法。 5. executeInternal(final HttpHeaders headers) executeInternal 方法在整个 RestTemplate 的 HTTP 请求执行流程里属于非常底层的操作。 protected ListenableFutureClientHttpResponse executeInternal(final HttpHeaders headers) throws IOException {final SettableListenableFutureClientHttpResponse responseFuture new SettableListenableFuture();ChannelFutureListener connectionListener new ChannelFutureListener() {public void operationComplete(ChannelFuture future) throws Exception {if (future.isSuccess()) {Channel channel future.channel();channel.pipeline().addLast(new ChannelHandler[]{new RequestExecuteHandler(responseFuture)});FullHttpRequest nettyRequest Netty4ClientHttpRequest.this.createFullHttpRequest(headers);channel.writeAndFlush(nettyRequest);} else {responseFuture.setException(future.cause());}}};// netty启动器this.bootstrap.connect(this.uri.getHost(), getPort(this.uri)).addListener(connectionListener);return responseFuture;} 作用负责将相关请求信息转换为适合底层网络通信框架Netty的操作并处理网络连接和请求发送的具体细节。实现通过Netty异步发起HTTP请求连接成功后添加请求处理器并发送请求最后将响应结果或者异常设置到 responseFuture 中然后返回该 responseFuture。 通过对 RestTemplate 源码的剖析我们可以清晰地看到 RestTemplate 在处理 HTTP 请求时的内部工作机制其实就是基于 Netty 来实现 HTTP 请求的。 这种基于 Netty 的实现方式为 Spring Boot 项目中的 HTTP 通信提供了一种高效、稳定的解决方案并且通过 RestTemplate 提供的一系列方法开发人员能够方便地在项目中进行 HTTP 请求的发送和响应的处理。 这不仅体现了 Spring 框架在设计上的分层架构思想也展示了如何利用成熟的网络通信框架 Netty来构建强大的 HTTP 客户端功能 避免重复造轮子。
http://www.dnsts.com.cn/news/232654.html

相关文章:

  • 深圳做网站的网络公司crm管理软件
  • 销售网站建设推广php自助建站程序
  • 沂南县建设局网站中国互联网百强企业名单
  • 孙俪做的网站广告做网站用花瓣上的图片会侵权吗
  • 国外做婚纱的网站游戏推广员怎么做
  • 医院网站改版建设招标公告小企业怎么建网站平台
  • 网站建设中页面模板下载江苏建设电子信息网站
  • 网站建设官网型好呢还是商城型三亚8名男女深夜被抓
  • 中企动力网站建设 长春阿里巴巴网站建设策略调研
  • 用html表格做的网站开电商有哪些步骤
  • 2003访问网站提示输入用户名密码网站推广软件免费版
  • 企业网站建设需要哪些资料重庆中小企业名录
  • 域名购买网站有哪些百度seo引流怎么做
  • 城市规划做底图的网站网站建设三站合一微信小程序
  • 万盛网站建设网架钢构公司
  • 网站平台搭建要多少市场调研报告ppt模板
  • 铜官山区建设局网站站长之家权重
  • 手机和wap网站建设什么是企业网站
  • phpcms获取网站名称企业域名是什么意思
  • 凡客诚品网站wordpress重新安装插件
  • 如何设计优秀的公司网站企业网站设计推广方案
  • 网站策划书包括哪些内容如何做好集团网站建设
  • 网站建设构成技术要求淘宝店铺代运营一般怎么收费
  • 仪征市城乡建设局网站珠宝首饰网站源码
  • 杭州网站seo公司sem推广软件
  • 网页设计网站怎么做开发一个软件能卖多少钱
  • 2019年做网站厦门网络推广建网站
  • 郑州网站营销推广广州万户网络
  • 网站域名不想实名认证怎么建自己公司网站
  • 怎么做淘宝客手机网站乐清网站网络公司