zoukankan      html  css  js  c++  java
  • Http调用-静态封装类(RestTemplate)

    1、问题描述

    项目中封装了个restTemplate的静态调用类,分享下,希望能帮到需要的朋友。

    2、解决方案

    2.1 简要说明:

    以前用httpclient用的比较多,后来开始用restTemplate,查了两者的区别,大部分无非就是:

    (1)restTemplate是包含在spring包中的,使用起来更加方便一些,调用也简洁一些;

    (2)restTemplate的低层支持多种调用,比如:httpclient、HttpURLConnection等吧;

    ​ 个人认为两者都是为了发送http请求,本质上区别不大,无非就是restTemplate又做了一层封装,使用起来更加方便,代码更加简洁而已。。

    2.2 静态调用类

    完整代码:

    import com.alibaba.fastjson.JSONObject;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.http.*;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.client.RestTemplate;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * http调用工具类,软件老王
     */
    public class invokeUtils {
    
        /**
         * post调用,软件老王
         *
         * @param url
         * @param jsonString
         * @return
         */
        public static String postInvoke(String url, String jsonString) {
            return invoke(url, jsonString, null, RequestMethod.POST);
        }
    
        /**
         * get调用,软件老王
         *
         * @param url
         * @return
         */
        public static String getInvoke(String url) {
            return invoke(url, null, null, RequestMethod.GET);
        }
    
        /**
         * 通用,软件老王
         *
         * @param url
         * @param jsonString
         * @param token
         * @param requestMethod
         * @return
         */
        public static String invoke(String url, String jsonString, String token, RequestMethod requestMethod) {
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.parseMediaType("application/json; charset=UTF-8"));
            headers.add("Accept", MediaType.APPLICATION_JSON.toString());
            if (!StringUtils.isEmpty(token)) {
                headers.add("Authorization", token);
            }
            HttpEntity<String> httpEntity;
    
            if (!StringUtils.isEmpty(jsonString)) {
                httpEntity = new HttpEntity<>(jsonString, headers);
            } else {
                httpEntity = new HttpEntity<>("parameters", headers);
            }
            RestTemplate rst = new RestTemplate();
            ResponseEntity<String> responseEntity = null;
    
            if (RequestMethod.POST.equals(requestMethod)) {
                try {
                    responseEntity = rst.postForEntity(url, httpEntity, String.class);
                } catch (Exception e) {
                    return e.getMessage();
                }
                return responseEntity.getBody();
            }
            try {
                responseEntity = rst.exchange(url, HttpMethod.GET, httpEntity, String.class);
            } catch (Exception e) {
                return e.getMessage();
            }
            return responseEntity.getBody();
        }
    
    
        //测试
        public static void main(String[] args) {
            Map map = new HashMap<>();
            map.put("name", "laowang");
            map.put("des", "shuaige");
    
            String jsonString = JSONObject.toJSONString(map);
            invokeUtils.postInvoke("www.ruanjianlaowang.com", jsonString);
        }
    }
    
    

    说明:

    (1)入参为json格式,调用时候,需要把对象或者数组转换成json格式;MediaType是:application/json; charset=UTF-8

    (2)3个静态方法,postInvoke和getInvoke,根据传参调用invoke;

    (3)post请求使用的是:rst.postForEntity(url, httpEntity, String.class);

    (4)get请求使用是:responseEntity = rst.exchange(url, HttpMethod.GET, httpEntity, String.class);

    (5)可以结合上节提到的@PostConstruct标签,实现静态方法调用service动态方法,将调用入参、返回参数、响应时间等入库。

    2.3 代码验证

    (1)map转json,如下图;

    (2)调用前,header中是:application/json; charset=UTF-8,body中是:{"des":"shuaige","name":"laowang"},如下图:



    更多信息请关注公众号:「软件老王」,关注不迷路,软件老王和他的IT朋友们,分享一些他们的技术见解和生活故事。

    更多信息请关注公众号:「软件老王」,关注不迷路,IT技术与相关干货分享,回复关键字获取对应干货,本文版权归作者软件老王所有,转载需注明作者、超链接,否则保留追究法律责任的权利。
  • 相关阅读:
    tomcat 启动 报错Neither the JAVA_HOME nor the JRE_HOME environment variable is definedtemp
    tomcat linux 加入服务自动启动
    registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
    tomcat 8 加 struts2的 java.lang.NoSuchFieldException: resourceEntries
    tomcat Can't create cache file!
    tomcat 部署时修改服务器时间
    tomcat java变量环境设置
    scrapy 动态IP、随机UA、验证码
    scrapy xpath、正则表达式、css选择器
    Saltstack windows可视化操作(十四)
  • 原文地址:https://www.cnblogs.com/ruanjianlaowang/p/15123139.html
Copyright © 2011-2022 走看看