zoukankan      html  css  js  c++  java
  • SprirngBoot微服务之间的交互—— restTemplate

    一 例:需要在storage服务中请求utils服务的某个接口(两个服务都已向同一台eureka server 注册)

    步骤:

    1 在utils创建需被调用的接口

    @RestController
    @RequestMapping("/api")
    public class CheckIPResource {
          @PostMapping("/checkip")
          public String checkIP(@RequestBody TestEntity testEntity) {
              //处理数据
              // 返回结果
              return "404";
          }
    }

    2 在storage的主类里创建restTemplate

    位置: com.ejtone.ejt1.StorageApp
    ​
    public class StorageApp {
        @Bean
        @LoadBalanced
        RestTemplate restTemplate(){ return new RestTemplate(); }
    }

    3 在storage需要调用utils接口的地方去调用

    public class CheckIpService {
    ​
        @Autowired
        private RestTemplate restTemplate;
        
        public void testFrom(TestEntity testEntity){
        
          // postForObject   请求方式:post  常用的请求方式还有get,具体见下方第二点
          // http://utils/api/checkip  utils:是utils微服务向eureka server注册时的名称,后接具体位置
          // new HttpEntity<>(testEntity) 请求体 --可带请求头,具体见下方第三点
          //String.class 请求响应返回后的数据的类型
          restTemplate.postForObject("http://utils/api/checkip",
                                     new HttpEntity<>(testEntity),
                                     String.class);
        }
    }

    二 请求方式除了上面使用的post之外,还有getForObject:

    // 参数url是http请求的地址
    // Class responseType  请求响应返回后的数据的类型
    // String... urlVariables 请求中需要设置的参数
    RestTemplate.getForObject(String url, Class responseType, String... urlVariables)
    ​
    例如下方,url上带着一个参数{id},最后执行该方法会返回一个String类型的结果,后面的id是请求的一个具体变量。
    template.getForObject(url + "get/{id}", String.class, id);

    三 HttpEntity<>(请求体,请求头)

    public class ParService {
        @Autowired
        private RestTemplate restTemplate;
        
        public Par setPar(TxtFileVM txtFileVM, HttpServletRequest request) {
                //创建一个请求头
                HttpHeaders headers = new HttpHeaders();
                Enumeration<String> headerNames = request.getHeaderNames();
                while (headerNames.hasMoreElements()) {
                    String key = (String) headerNames.nextElement();
                    String value = request.getHeader(key);
                    headers.add(key, value);
                }
                txtPath = restTemplate.postForObject("http://storage/api/create/txtfile",
                                                      new HttpEntity<>(txtFileVM,headers),
                                                      String.class);
    }
  • 相关阅读:
    luogu P3128 [USACO15DEC]最大流Max Flow (树上差分)
    codeforces 600E . Lomsat gelral (线段树合并)
    bzoj 1483: [HNOI2009]梦幻布丁 (链表启发式合并)
    bzoj 1257: [CQOI2007]余数之和 (数学+分块)
    codevs 2606 约数和问题 (数学+分块)
    bzoj 2038: [2009国家集训队]小Z的袜子(hose) (莫队)
    bzoj 1086: [SCOI2005]王室联邦 (分块+dfs)
    bzoj 4542: [Hnoi2016]大数 (莫队)
    【NOIp模拟赛】Tourist Attractions
    【NOIp模拟赛】String Master
  • 原文地址:https://www.cnblogs.com/serena25/p/7755418.html
Copyright © 2011-2022 走看看