Spring6中的httpclient新特性的使用

简介: 主要使用Spring6自带的@HttpExchange,@GetExchange和@PostExchange完成http服务的请求

在Spring6之前,我们做http服务的请求主要是通过jdk中的URLConnection类,或者第三方http客户端调用库比如HttpClient和OkHttp,或者Spring6之前提供的RestTemplate工具。至于SpringCloud或者其他微服务框架中使用到的调用方式比如Ribbon、Feign之类的,不在本文讨论范围,因为那涉及到微服务概念中负载均衡,熔断等其他方面的内容,由于认知比较肤浅,暂不做讨论,只是为了说明一个http服务接口的客户端简单调用,下面将本人使用Spring6自带的注解完成http客户端请求过程描述如下。

首先客户端程序在使用Spring6框架的基础上,要引入spring-boot-starter-webflux,才能使用@HttpExchange,@GetExchange和@PostExchange这些注解,因为这些注解都是在该响应式包中的。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>

引入上述依赖以后,需要加入一个配置类,该配置类主要配置WebClient和需要使用该WebClient做调用的业务服务类。

@ConfigurationpublicclassWebConfig {
@BeanWebClientwebClient() {
returnWebClient.builder()
            .baseUrl("http://localhost:18899")  //需要调用的服务的基础地址            .build();
     }
@BeanUserInfoServiceuserInfoService() {
HttpServiceProxyFactoryhttpServiceProxyFactory=HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient()))
                        .build();
returnhttpServiceProxyFactory.createClient(UserInfoService.class);
    }
 }

上述配置完成,就需要在UserInfoService业务类中定义调用的接口信息了。

@HttpExchange("")
publicinterfaceUserInfoService {
@GetExchange("/userinfo")
Stringuserinfo(@RequestParamStringname);
@PostExchange(url="/userlist")
List<User>userlist(@RequestBodyPaginationpagination);
}

通过@HttpExchange,@GetExchange和@PostExchange可以定位到方法需要调用的具体地址,以userinfo为例,其请  求的地址就是http://localhost:18899/userinfo?name=xxxx。下面就是通过测试类调用该接口。

@SpringBootTest(classes= {Springboot26DemoApplication.class})
@RunWith(SpringRunner.class)
publicclassClientApplicationTests {
@AutowiredUserInfoServiceuserInfoService;
@Testpublicvoiduserinfo() {
Stringinfo=userInfoService.userinfo("bob");
System.out.println(info);
    }
@TestpublicvoiduserList() {
Paginationpagination=newPagination();
pagination.setPageSize(2);
List<User>userList=userInfoService.userlist(pagination);
System.out.println(userList);
    }

提供接口服务的服务端程序提供两个测试接口,如下:

@RestControllerpublicclassHttpTestController {
@GetMapping("/userinfo")
publicStringuserinfo(@RequestParamStringname){
return"user info :"+name;
    }
@PostMapping("/userlist")
publicList<User>userList(@RequestBodyPaginationpagination){
List<User>userList=newArrayList<>();
for(inti=1;i<=5;i++){
Useruser=newUser(i,"username"+i,"name"+i,i);
userList.add(user);
        }
if(pagination.getPageSize()>5){
pagination.setPageSize(5);
        }
returnuserList.subList(pagination.getPageIndex(), pagination.getPageSize());
    }
}

在此就可以完成了这个新特性的使用。根据官方给予的文档和demo可以实现更多的场景调用,后面继续研究。在这里主  要有两个说明,一个就是WebClient的注入,本人理解主要就是区分不同进程服务,如果存在多个,需要注入多WebClient,业务接口上createClient的时候注入不同的WebClient即可,当然这部分的地址配置需要放到配置文件中,做成可配置的比较合理。还有一点就是连接复用问题,网络上已经有相关的文章说明如何配置连接池参数,做资源最大化利用的处理,读者可以自行去试验。最后一点就是返回值的赋值问题,如果客户端定义的po中属性比接口方提供的多,那么做属性赋值时,多出来的属性赋值,string类型的会赋值为'null',这点感觉很奇怪,可能有配置可以解决这个问题。

总体感觉Spring6提供的这个新特性还是比较简洁方便的,其他方面再做研究。

目录
相关文章
|
7月前
|
Java 数据库 Spring
Spring事务的传播机制(行为、特性)
Spring事务的传播机制(行为、特性)
136 0
|
7月前
|
JSON Dubbo Java
微服务框架(二十)Dubbo Spring Boot 生产就绪特性
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Dubbo Spring Boot 生产就绪特性
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
58 4
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
42 0
|
4月前
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
47 1
|
28天前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
31 0
|
7月前
|
设计模式 前端开发 Java
玩转Spring—Spring5新特性之Reactive响应式编程实战
玩转Spring—Spring5新特性之Reactive响应式编程实战
255 0
|
7月前
|
XML 监控 安全
Spring特性之一——AOP面向切面编程
Spring特性之一——AOP面向切面编程
82 1
|
3月前
|
安全 Java 开发者
强大!Spring Cloud Gateway新特性及高级开发技巧
在微服务架构日益盛行的今天,网关作为微服务架构中的关键组件,承担着路由、安全、监控、限流等多重职责。Spring Cloud Gateway作为新一代的微服务网关,凭借其基于Spring Framework 5、Project Reactor和Spring Boot 2.0的强大技术栈,正逐步成为业界的主流选择。本文将深入探讨Spring Cloud Gateway的新特性及高级开发技巧,助力开发者更好地掌握这一强大的网关工具。
268 6
|
7月前
|
安全 Java 程序员
Spring框架的核心特性是什么?
【4月更文挑战第30天】Spring 的特性
409 0