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

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

  1. 背景
    1. 在查询订单信息的时候,需要获取用户的信息,同时订单和用户分属于不同的服务中,并且服务的数据库的数据分开的,其直接连接数据库并操作数据库是不可以的。那我们可以通过RestTemplate对象请求另一个服务的API接口获取相关的响应数据,然后再封装返回
  2. 在Spring Boot中我们可以先注册RestTemplate的Bean
    1. 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.     /**
           * 结合@RequiredArgsConstructor进行构造器注入
           */
          private final RestTemplate restTemplate;
  4. 在查询的方法处使用远程调用
    1. 
          /**
           * 根据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("没有查询到对应订单信息");
          }

http://www.kler.cn/news/160252.html

相关文章:

  • 深信服行为管理AC设置禁止用户使用向日葵等远程软件
  • 人工智能-语音识别技术paddlespeech的搭建和使用
  • centos用户相关命令
  • python起步
  • 问卷调查须避免的错误要点(02):避免逻辑错误与提升数据质量
  • 基于jsp+servlet+mybatis的简易在线选课系统
  • Dubbo(二)dubbo调用关系
  • golang使用sip协议 用户名和密码注册到vos3000
  • vue3中如何实现事件总线eventBus
  • 【数据结构(八)】哈希表
  • OpenCV-python numpy和基本作图
  • 甘草书店:#8 2023年11月22日 星期三「“说一套做一套”的甘草与麦田」
  • InnoDB的数据存储结构
  • Qt5.15.2的镜像网址
  • 用100ask 6ull配合 飞凌 elf1的教程进行学习的记录 - ap3216
  • SQL手工注入漏洞测试(Sql Server数据库)-墨者
  • 【Linux】进程控制-进程终止
  • 【musl-pwn】msul-pwn 刷题记录 -- musl libc 1.2.2
  • 面试官问:如何手动触发垃圾回收?幸好昨天复习到了
  • HarmonyOS学习--创建和运行Hello World
  • 基于SSM的物资物流系统
  • 什么是呼叫中心的语音通道?呼叫中心语音线路有几种?
  • [Electron] 将应用日志文件输出
  • 图解系列--Web服务器,Http首部
  • 我想涨工资,请问测试开发该怎么入门?
  • Zabbix自定义飞书webhook告警媒介2
  • vue 过滤器 (filters) ,实际开发中的使用
  • 解决 video.js ios 播放一会行一会不行
  • 【技术分享】RK356X Android11 以太网共享4G网络
  • Gti GUI添加标签