zoukankan      html  css  js  c++  java
  • java 调用第三方http接口的方式【RestTemplate】

      早期的 HttpURLConnection 使用非常繁琐,得写很多代码实现一个简单的请求,而 HttpClient 简单很多,不过此种方法使用起来太过繁琐,需要进行各种序列化和反序列化。RestTemplate 进一步简化,它可以像OkHttp那样的写法,但是常见的请求基本一句代码就可以搞定。

      使用RestTemplate方法,pom.xml文件几乎不用添加配置

    <properties>
            <java.version>1.8</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
            <fastjson.version>1.2.47</fastjson.version>
        </properties>  
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
    • 创建配置类RestTemplateConfig
    package com.resttemp.demo.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.client.ClientHttpRequestFactory;
    import org.springframework.http.client.SimpleClientHttpRequestFactory;
    import org.springframework.web.client.RestTemplate;
    
    
    @Configuration
    public class RestTemplateConfig {
    
        @Bean
        public RestTemplate restTemplate(ClientHttpRequestFactory factory){
            return new RestTemplate(factory);
        }
    
        @Bean
        public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
            SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
            factory.setConnectTimeout(15000);
            factory.setReadTimeout(5000);
            return factory;
        }
    }
    • 创建代理服务类
    package com.resttemp.demo.proxy;
    
    import com.alibaba.fastjson.JSONObject;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.*;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    
    import java.util.HashMap;
    import java.util.Map;
    
    
    @Service
    public class ARestTemplate {
    
        @Autowired
        private RestTemplate restTemplate;
    
        /**
         * 以get方式请求第三方http接口 getForEntity
         * @param url
         * @return
         */
        public String doGetEnity1(String url){
            ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
            String riskmerchantself = responseEntity.getBody();
            return riskmerchantself;
        }
    
        /**
         * 以get方式请求第三方http接口 getForObject
         * 返回值返回的是响应体,省去了我们再去getBody()
         * @param url
         * @return
         */
        public String doGetForObj1(String url){
            String riskmerchantself = restTemplate.getForObject(url, String.class);
            return riskmerchantself;
        }
    
        /**
         * 以post方式请求第三方http接口 postForEntity
         * @param url
         * @return
         */
        public String doPostForEnity1(String url){
            // 设置请求头
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.add("Content-Type", "application/json;charset=utf-8");
            //设置请求参数
            Map<String, Object> postData = new HashMap<>();
            postData.put("merchant_name", "model1");
            //将请求头和请求参数设置到HttpEntity中
            HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(postData, httpHeaders);
            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
            String body = responseEntity.getBody();
            return body;
        }
    
        /**
         * 以post方式请求第三方http接口 postForEntity
         * @param url
         * @return
         */
        public String doPostForObj1(String url){
            // 设置请求头
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.add("Content-Type", "application/json;charset=utf-8");
            //设置请求参数
            Map<String, Object> postData = new HashMap<>();
            postData.put("merchant_name", "model1");
            //将请求头和请求参数设置到HttpEntity中
            HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(postData, httpHeaders);
            String body = restTemplate.postForObject(url, httpEntity, String.class);
            return body;
        }
    
        /**
         * exchange
         * @return
         */
        public String doExchange(String url){
            //header参数
            HttpHeaders headers = new HttpHeaders();
            String token = "qqqqq";
            headers.add("authorization", token);
            headers.setContentType(MediaType.APPLICATION_JSON);
    
            //放入body中的json参数
            JSONObject obj = new JSONObject();
            obj.put("merchant_name", "model exchange");
            //组装
            HttpEntity<JSONObject> request = new HttpEntity<>(obj, headers);
            ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
            String body = responseEntity.getBody();
            return body;
        }
    }
    • controller层调用
    package com.resttemp.demo.controller;
    
    import com.resttemp.demo.proxy.ARestTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/a")
    public class AController {
    
        @Autowired
        private ARestTemplate aRestTemplate;
    
    
        @GetMapping("/doGetEnity1")
        public String doGetEnity1(){
          try{
              String result= aRestTemplate.doGetEnity1("https:/***ById?id=3");
              System.out.println(result);
              return result;
    
          }catch (Exception e){
              return e.getMessage();
          }
        }
    
        @GetMapping("/doGetForObj1")
        public String doGetForObj1(){
            try{
                String result= aRestTemplate.doGetForObj1("https:/***ById?id=4");
            System.out.println(result);
            return result;
    
            }catch (Exception e){
                return e.getMessage();
            }
        }
    
        @PostMapping("/doPostForEnity1")
        public String doPostForEnity1(){
            try{
            String result= aRestTemplate.doPostForEnity1("https:/***/Save");
            System.out.println("jsonobject:"+result);
            return  result;
    
        }catch (Exception e){
            return e.getMessage();
        }
        }
    
        @PostMapping("/doPostForObj1")
        public String doPostForObj1(){
            try{
            String result= aRestTemplate.doPostForObj1("https:/***/Save");
            System.out.println("jsonobject:"+result);
            return  result;  }catch (Exception e){
                return e.getMessage();
            }
        }
        @PostMapping("/doExchange")
        public String doExchange(){
            try {
                String result = aRestTemplate.doExchange("https:/***/Save");
                System.out.println("jsonobject:" + result);
                return result;
            } catch (Exception e) {
                return e.getMessage();
            }
        }
    }

      完整目录结构如下

      参考:https://www.jianshu.com/p/2a59bb937d21

  • 相关阅读:
    十二周学习进度
    冲刺第十天
    19.Maven 的单模块之 Spring MVC + Spring + Spring Data JPA 项目(基于 IntelliJ IDEA)
    18. Maven 的单模块 / 多模块之 Spring MVC + Spring + Mybatis 项目讲解(重点)
    16.Java Web 项目环境搭建
    17.Maven 项目介绍
    15.Postfix Completion 的使用
    16.插件讲解
    14.Emmet 讲解
    13.文件代码模板讲解
  • 原文地址:https://www.cnblogs.com/personblog/p/14922056.html
Copyright © 2011-2022 走看看