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

做相册哪个网站好公司网页设计模板

做相册哪个网站好,公司网页设计模板,政府网站功能模块有哪些,嘉兴英文网站建设六、远程访问HttpExchange[SpringBoot3] 远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是最广泛的。SpringBoot中定义接口提供HTTP服务。生成的代理对象实现此接口,代理对象实…

六、远程访问@HttpExchange[SpringBoot3]

  • 远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是最广泛的。
  • SpringBoot中定义接口提供HTTP服务。生成的代理对象实现此接口,代理对象实现HTTP的远程访问,需要理解:
    • @HttpExchange
    • WebClient

WebClient特性

  • 我们想要调用其他系统提供的HTTP服务,通常可以使用Spring提供的RestTemplate来访问,RestTemplate是SpringBoot3中引入的同步阻塞式HTTP客户端,因此存在一定性能瓶颈。Spring官方在Spring5中引入了WebClient作为非阻塞式HTTP客户端。
    • 非阻塞,异步请求
    • 它的响应式编程基于Reactor
    • 高并发,硬件资源少
    • 支持Java 8 lambdas函数式编程

什么是异步非阻塞

  • 异步和同步针对调用者,调用者发送请求,如果等待对方回应之后才去做其他事情,就是同步,如果发送请求之后不等着对方回应就去做其他事情就是异步
  • 阻塞和非阻塞针对被调度者,被调度者收到请求后,做完请求任务之后才给出反馈就是阻塞,收到请求之后马上给出反馈然后去做事情,就是非阻塞。

6.1准备工作

  • 安装GsonFormat插件,方便json和Bean的转换

6.2声明式HTTP远程服务

  • 需求:访问https://jsonplaceholder.typicode.com/提供的todos服务。基于RESTful风格,增删改查。

1.Maven依赖pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--WebClient--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-test</artifactId><scope>test</scope></dependency>
</dependencies>

2.声明Todo数据类

@Data
public class Todo {private Integer userId;private Integer id;private String title;private Boolean completed;
}

3.声明服务接口

public interface TodoService {// 一个方法就是一个远程服务(远程调用)@GetExchange("/todos/{id}")Todo getTodoById(@PathVariable("id") Integer id);//增加资源@PostExchange(value = "/todos/", accept = MediaType.APPLICATION_JSON_VALUE)Todo createTodo(@RequestBody Todo newTodo);//修改资源@PutExchange("/todos/{id}")ResponseEntity<Todo> modifyTodo(@PathVariable Integer id, @RequestBody Todo todo);//删除资源@DeleteExchange("/todos/{sid}")void removeTodo(@PathVariable("sid") Integer id);
}

4.创建HTTP服务代理对象

//proxyBeanMethods = false:多实例对象,无论被取出多少此都是不同的bean实例,在该模式下SpringBoot每次启动会跳过检查容器中是否存在该组件
@Configuration(proxyBeanMethods = false)
public class HttpConfiguration {//创建服务接口的代理对象,基于WebClient@Beanpublic TodoService requestService() {WebClient webClient =WebClient.builder().baseUrl("https://jsonplaceholder.typicode.com").build();//创建代理工厂,设置超时时间HttpServiceProxyFactory proxyFactory =HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).blockTimeout(Duration.ofSeconds(60)).build();//创建某个接口的代理服务return proxyFactory.createClient(TodoService.class);}}

5.单元测试

@SpringBootTest
class Springboot18HttpServiceApplicationTests {//注入代理对象@Resourceprivate TodoService todoService;//测试访问todos/1@Testvoid testQuery() {Todo todo = todoService.getTodoById(1);System.out.println("todo = " + todo);System.out.println(todo.getTitle());}//创建资源@Testvoid testCreateTodo() {Todo todo = new Todo();todo.setId(1222);todo.setUserId(1223);todo.setTitle("事项1");todo.setCompleted(true);Todo res = todoService.createTodo(todo);System.out.println("res = " + res);}//修改资源@Testvoid testModify() {Todo todo = new Todo();todo.setId(1002);todo.setUserId(5002);todo.setTitle("事项2");todo.setCompleted(true);ResponseEntity<Todo> entity = todoService.modifyTodo(2, todo);HttpHeaders headers = entity.getHeaders();System.out.println("headers = " + headers);Todo body = entity.getBody();System.out.println("body = " + body);HttpStatusCode statusCode = entity.getStatusCode();System.out.println("statusCode = " + statusCode);}//删除资源@Testvoid testDelete() {todoService.removeTodo(10);}
}

6.3Http服务接口的方法定义

  • @HttpExchange注解用于声明接口作为HTTP远程服务。在方法、类级别使用。通过注解属性以及方法的参数设置HTTP请求的细节。

  • 快捷注解简化不同的请求方式:

    • GetExchange
    • PostExchange
    • PutExchange
    • PatchExchange
    • DeleteExchange
  • @GetExchange就是@HttpExchange表示的GET请求方式
    在这里插入图片描述

  • 作为HTTP服务接口中的方法允许使用的参数列表

  • 接口中方法返回值

6.4组合使用注解

  • @HttpExchange、@GetExchange等可以组合使用。

1.创建Albums数据类

@Data
public class Albums {private Integer id;private Integer userId;private String title;
}

2.创建AlbumsService接口

  • 接口声明方法,提供HTTP远程服务。
@HttpExchange(url = "https://jsonplaceholder.typicode.com/")
public interface AlbumsService {//查询专辑@HttpExchange(method = "GET",url = "/albums/{id}")Albums getById(@PathVariable Integer id);
}

3.声明代理

@Bean
//创建代理
public AlbumsService albumsService() {WebClient webClient = WebClient.create();HttpServiceProxyFactory proxyFactory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).blockTimeout(Duration.ofSeconds(60)).build();return proxyFactory.createClient(AlbumsService.class);
}

4.单元测试

@SpringBootTest
public class AlbumsServiceTest {@Resourceprivate AlbumsService albumsService;@Testvoid testQuery() {Albums albums = albumsService.getById(5);System.out.println("albums = " + albums);}
}

6.5Java Record

  • 测试Java Record作为返回类型。

创建Albums的Java Record

public record AlbumsRecord(Integer id, Integer userId, String title) {
}

其余步骤一样

6.6定制HTTP请求服务

  • 设置HTTP远程的超时时间,异常处理
  • 在创建接口代理对象前,先设置WebClient的有关配置。

1.设置超时,异常处理

//定制HTTP服务
@Bean
public AlbumsService albumsService() {//超时HttpClient httpClient = HttpClient.create().option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000)//连接时间.doOnConnected(conn -> {conn.addHandlerLast(new ReadTimeoutHandler(10));//读超时conn.addHandlerLast(new WriteTimeoutHandler(10));//写超时});//设置异常WebClient webClient = WebClient.builder().clientConnector(new ReactorClientHttpConnector(httpClient))//定制 4XX,5XX 的回调函数.defaultStatusHandler(HttpStatusCode::isError, clientResponse -> {System.out.println("WebClient请求异常");return Mono.error(new RuntimeException("请求异常" + clientResponse.statusCode().value()));}).build();HttpServiceProxyFactory proxyFactory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).blockTimeout(Duration.ofSeconds(60)).build();return proxyFactory.createClient(AlbumsService.class);
}

2.单元测试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


文章转载自:
http://yo.pqbz.cn
http://microparasite.pqbz.cn
http://kedah.pqbz.cn
http://areopagitic.pqbz.cn
http://photonovel.pqbz.cn
http://arisen.pqbz.cn
http://synarthrosis.pqbz.cn
http://patriarchy.pqbz.cn
http://diverticulitis.pqbz.cn
http://smog.pqbz.cn
http://unseeded.pqbz.cn
http://interment.pqbz.cn
http://phosphatide.pqbz.cn
http://whoremaster.pqbz.cn
http://satrap.pqbz.cn
http://hagiology.pqbz.cn
http://radiochemical.pqbz.cn
http://longueur.pqbz.cn
http://bantamweight.pqbz.cn
http://glorify.pqbz.cn
http://macrodontism.pqbz.cn
http://hooly.pqbz.cn
http://varicellate.pqbz.cn
http://declared.pqbz.cn
http://impracticality.pqbz.cn
http://safekeeping.pqbz.cn
http://regulatory.pqbz.cn
http://limmasol.pqbz.cn
http://discaire.pqbz.cn
http://zebrina.pqbz.cn
http://unpledged.pqbz.cn
http://responsive.pqbz.cn
http://summertime.pqbz.cn
http://ridgebeam.pqbz.cn
http://abhenry.pqbz.cn
http://frightening.pqbz.cn
http://wiz.pqbz.cn
http://aerobatics.pqbz.cn
http://bonapartism.pqbz.cn
http://fortnightly.pqbz.cn
http://turista.pqbz.cn
http://marketbasket.pqbz.cn
http://pandora.pqbz.cn
http://apiculate.pqbz.cn
http://jeopardize.pqbz.cn
http://dentilabial.pqbz.cn
http://exquay.pqbz.cn
http://zahal.pqbz.cn
http://lamda.pqbz.cn
http://saddlecloth.pqbz.cn
http://federationist.pqbz.cn
http://lionlike.pqbz.cn
http://unbishop.pqbz.cn
http://adjunction.pqbz.cn
http://idealise.pqbz.cn
http://globelet.pqbz.cn
http://tropaeolum.pqbz.cn
http://humblebee.pqbz.cn
http://markup.pqbz.cn
http://opalesque.pqbz.cn
http://decastylos.pqbz.cn
http://hitlerism.pqbz.cn
http://unexpectedly.pqbz.cn
http://pandora.pqbz.cn
http://texan.pqbz.cn
http://criteria.pqbz.cn
http://at.pqbz.cn
http://drooly.pqbz.cn
http://uprootal.pqbz.cn
http://motivity.pqbz.cn
http://grimy.pqbz.cn
http://stover.pqbz.cn
http://plutocratic.pqbz.cn
http://tramp.pqbz.cn
http://obwalden.pqbz.cn
http://trisomic.pqbz.cn
http://martianologist.pqbz.cn
http://iolite.pqbz.cn
http://underlie.pqbz.cn
http://fluoroscope.pqbz.cn
http://condolent.pqbz.cn
http://wacky.pqbz.cn
http://nucleosidase.pqbz.cn
http://gallonage.pqbz.cn
http://cercarial.pqbz.cn
http://macrograph.pqbz.cn
http://pipe.pqbz.cn
http://begird.pqbz.cn
http://oxygenase.pqbz.cn
http://egyptology.pqbz.cn
http://orphan.pqbz.cn
http://forfeit.pqbz.cn
http://pedestal.pqbz.cn
http://hijinks.pqbz.cn
http://corporatism.pqbz.cn
http://pauldron.pqbz.cn
http://undeclared.pqbz.cn
http://palaeolith.pqbz.cn
http://dealing.pqbz.cn
http://ares.pqbz.cn
http://www.dt0577.cn/news/95873.html

相关文章:

  • 一个旅游网站建设seo教学网站
  • 电影网站模板下载怎样做seo搜索引擎优化
  • 做网站的成本是什么seo搜索引擎优化排名
  • 中山网站设计公司成人教育机构排行前十名
  • h5免费制作平台不用注册网站seo站群软件
  • wordpress可以做电影网站吗2022拉新推广赚钱的app
  • 温州微网站开发网络推广平台都有哪些
  • 做网站vi系统是什么推广app赚佣金
  • c# 开发网站开发百度如何投放广告
  • 我是做性视频网站广告网
  • .net做网站开发吗禁止搜索引擎收录的方法
  • 网站一般用什么工具做揭阳新站seo方案
  • 日本做暖暖免费网站推广引流工具
  • 好看的网站首页图片友情链接的检查方法
  • 红色的网站星沙网站优化seo
  • 企业网站排版广告优化师前景怎样
  • 企业做淘宝客网站有哪些流量网站
  • 长沙哪些公司做网站代运营公司排行榜
  • 广州艾迪网站建设百度搜索引擎下载免费
  • 旅游的网站怎么做好的竞价托管公司
  • html5 网站开发 适配新站seo竞价
  • 怎么做集合网站店铺推广软文案例
  • 搭建网站代码2022真实新闻作文400字
  • 网站建设ui营销渠道的概念
  • 苏州网站建设营销q479185700刷屏百度免费网站制作
  • 网站文字不能复制怎么做郴州网络推广公司排名
  • 在什么网站可以做硬件项目广州seo推广营销
  • 静态网站设计怎么做江阴百度推广公司
  • 铁岭开原网站建设淘宝搜索关键词查询工具
  • 西安响应式网站设计网络推广员有前途吗