【Spring Boot】如何通过RestTemplate获取另一个服务的接口返回信息

  1. 背景

    1. 在查询订单信息的时候,需要获取用户的信息,同时订单和用户分属于不同的服务中,并且服务的数据库的数据分开的,其直接连接数据库并操作数据库是不可以的。那我们可以通过RestTemplate对象请求另一个服务的API接口获取相关的响应数据,然后再封装返回
  2. 在Spring Boot中我们可以先注册RestTemplate的Bean
    1.

    java 复制代码
    package com.app.order.config;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    /**
     * webmvc的相关配置
     *
     * @author Administrator
     */
    @Configuration
    @Slf4j
    public class WebMvcConfig {
    
        /**
         * 注入RestTemplate的Bean
         *
         * @return 返回RestTemplate
         */
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
    }
  3. 在使用的地方注入RestTemplate对象
    1.

    java 复制代码
        /**
         * 结合@RequiredArgsConstructor进行构造器注入
         */
        private final RestTemplate restTemplate;
  4. 在查询的方法处使用远程调用
    1.

    java 复制代码
        /**
         * 根据id查询订单信息
         *
         * @param id 订单id
         * @return 订单信息
         */
        @GetMapping("/{id}")
        public ResultBean<OrderVo> getById(@PathVariable Long id) {
            log.info("根据id查询订单信息...");
            Order order = orderService.getById(id);
            if (order != null) {
                OrderVo orderVo = new OrderVo();
                BeanUtil.copyProperties(order, orderVo);
                // 远程查找用户服务获取用户名信息
                // url地址
                String url = "http://127.0.0.1:8080/users/" + order.getUserId();
                // 发起远程调用
                ResultBean resultBean = restTemplate.getForObject(url, ResultBean.class);
                if (resultBean != null) {
                    UserVo userVo = new UserVo();
                    BeanUtil.copyProperties(resultBean.getData(), userVo);
                    orderVo.setUsername(userVo.getUsername());
                }
                return ResultBean.success(orderVo);
            }
            return ResultBean.error("没有查询到对应订单信息");
        }
相关推荐
古法老登瞎折腾8 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
智能运维指南8 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
小满zs9 小时前
Go语言第十七章(反射)
后端·go
小满zs9 小时前
Go语言第十五章(JSON序列化)
后端·go
小满zs9 小时前
Go语言第十六章(自定义类型)
后端·go
yz_aiks9 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
java·spring boot·大模型·ai agent·spring ai
金銀銅鐵9 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设9 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端
jason成都10 小时前
RTKLIB-Java 多基线联合RTK:FIX率从0%到91.5%的三层根因修复
java·gnss·rtklib·rtklib_java
鱼宵10 小时前
Stream 终端操作一次讲透:collect、count、reduce 怎么选
java·stream·终端操作