博客
关于我
Spring 6 正式“抛弃”feign
阅读量:796 次
发布时间:2023-03-22

本文共 1890 字,大约阅读时间需要 6 分钟。

Spring 6 HTTP Interface 新特性解析:基于接口定义 HTTP 服务的简单实现

Spring 6发布后,带来了一个全新的特性——HTTP Interface。这个特性让开发者可以通过注解标记的接口方法,轻松定义并执行HTTP请求。看起来,这个特性与Feign类似,但更倾向于规范化和简化HTTP调用,让开发者更加专注于业务逻辑。

创建简单的 HTTP 服务

首先,我们创建一个简单的Spring Boot项目来实现HTTP服务。具体步骤如下:

  • 创建实体类

    定义一个用户实体类,并添加toString方法用于用户信息的显示:

    public class User implements Serializable {    private int id;    private String name;    //省略构造方法、Getter和Setter    @Override    public String toString() {        return id + ":" + name;    }}
  • 创建Controller

    编写一个RESTful API端点,返回用户列表:

    @GetMapping("/users")public List
    getUsers() { return IntStream.rangeClosed(1, 10) .mapToObj(i -> new User(i, "User" + i)) .collect(Collectors.toList());}
  • 启动服务

    确保服务启动后,可以通过http://localhost:8080/users获取包含十个用户信息的用户列表。

  • 新建Spring Boot项目

    使用Spring Boot 3.0.0及以上版本创建新项目,确保以下依赖已添加:

    • Spring Web
    • Spring Reactive Web

    定义HTTP Interface接口

    创建一个简单的HTTP接口:

    public interface UserApiService {    @GetExchange("/users")    List
    getUsers();}

    使用HttpServiceProxyFactory创建代理对象

    在测试方法中使用HttpServiceProxyFactory创建代理对象:

    @Testvoid getUsers() {    WebClient client = WebClient.builder().baseUrl("http://localhost:8080/").build();    HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client)).build();    UserApiService service = factory.createClient(UserApiService.class);    List
    users = service.getUsers(); for (User user : users) { System.out.println(user); }}

    代理对象的工作原理

    Spring目前尚未提供更方便的方式创建代理对象,但HttpServiceProxyFactory的createClient方法源码显示,它使用了AOP代理的方式。未来版本可能会增加注解来简化代理对象的创建。

    接口方法的扩展用途

    除了上述简单使用,HTTP Interface支持各种参数和自定义异常处理。方法返回类型可以是任意自定义实体类型,与Spring MVC Controller方法类似。

    依赖管理建议

    在创建项目时,确保以下版本要求:

    • Java 17
    • Spring Boot 3.0.0
    • Spring Framework 6.0.0

    总结

    HTTP Interface特性为开发者提供了一种更简洁的方式定义HTTP服务接口。通过创建代理对象,开发者可以轻松调用远程服务,减少对传统HTTP客户端库(如RestTemplate)的依赖。未来版本可能会提供更丰富的注解支持和更简便的代理创建方式。

    欢迎关注我的知识星球,获取更多源码解析和架构分享!

    转载地址:http://vsqfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现EM算法(附完整源码)
    查看>>
    Objective-C实现EM算法(附完整源码)
    查看>>
    Objective-C实现entropy熵算法(附完整源码)
    查看>>
    Objective-C实现euclidean distance欧式距离算法(附完整源码)
    查看>>
    Objective-C实现Euclidean GCD欧几里得最大公约数算法(附完整源码)
    查看>>
    Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
    查看>>
    Objective-C实现euler method欧拉法算法(附完整源码)
    查看>>
    Objective-C实现eulerianPath欧拉路径算法(附完整源码)
    查看>>
    Objective-C实现eval函数功能(附完整源码)
    查看>>
    Objective-C实现Exceeding words超词(差距是ascii码的距离) 算法(附完整源码)
    查看>>
    Objective-C实现extended euclidean algorithm扩展欧几里得算法(附完整源码)
    查看>>
    Objective-C实现Factorial digit sum阶乘数字和算法(附完整源码)
    查看>>
    Objective-C实现factorial iterative阶乘迭代算法(附完整源码)
    查看>>
    Objective-C实现FigurateNumber垛积数算法(附完整源码)
    查看>>
    Objective-C实现Gale-Shapley盖尔-沙普利算法(附完整源码)
    查看>>
    Objective-C实现hamiltonianCycle哈密尔顿图算法(附完整源码)
    查看>>
    Objective-C实现hamming numbers汉明数算法(附完整源码)
    查看>>
    Objective-C实现hanning 窗(附完整源码)
    查看>>
    Objective-C实现hanoiTower汉诺塔算法(附完整源码)
    查看>>
    Objective-C实现hardy ramanujana定理算法(附完整源码)
    查看>>