首页 > 其他分享 >RestTemplate工具类实现

RestTemplate工具类实现

时间:2023-10-11 13:34:01浏览次数:26  
标签:return 实现 RestTemplate requestBody headers responseBodyType resEntity 工具 logger

工具类实现

@Component
public class RestTemplateUtil {

    private static final Logger logger = LoggerFactory.getLogger(RestTemplateUtil.class);

    @Resource
    private UnimisConfig unimisConfig;
    
    // 参见RestTemplate配置
    @Resource(name = "restTemplate")
    private RestTemplate restTemplate;

    /**
     * @param responseBodyType 返回体类型
     * @param requestBody 请求体
     * @return {@link T }
     * @Description  post请求
     * @author wangwenying
     * @date 2023-09-22
     */
    public <T, A> T doPost(Class<T> responseBodyType, A requestBody, UnimisReqEnum reqType) {
        try {
            //请求添加token头
            HttpHeaders headers = new HttpHeaders();
            headers.add(UnimisConstants.APP_ID, unimisConfig.getAppId());
            headers.add(UnimisConstants.APP_SECRET, unimisConfig.getAppSecret());
            MimeType mimeType = MimeTypeUtils.parseMimeType("application/json");
            MediaType mediaType = new MediaType(mimeType.getType(), mimeType.getSubtype(), StandardCharsets.UTF_8);
            // 请求体
            headers.setContentType(mediaType);
            HttpEntity<A> requestEntity = new HttpEntity<>(requestBody, headers);
            String url = unimisConfig.obtainRequestUrl(reqType);
            logger.info("url:{} HttpEntity:{}", url, JacksonUtils.toJson(requestEntity));
            ResponseEntity<T> resEntity = restTemplate.exchange(unimisConfig.obtainRequestUrl(reqType), HttpMethod.POST, requestEntity, responseBodyType);

            logger.info("resEntity:{}", JacksonUtils.toJson(resEntity));
            //请求结果
            HttpStatus statusCode = resEntity.getStatusCode();

            if (statusCode == HttpStatus.OK) {
                Optional<T> body = Optional.ofNullable(resEntity.getBody());
                if (body.isPresent()) {
                    return body.get();
                }
            }
        } catch (Exception e) {
            logger.error("Class: RestTemplateUtil; method: doPost; params:{}", JacksonUtils.toJson(responseBodyType, requestBody), e);
            return null;
        }
        return null;
    }

    /**
     * @param responseBodyType 返回类型
     * @param requestBody 请求体
     * @param uri 请求地址
     * @return {@link T }
     * @Description get请求
     * @author wangwenying
     * @date 2023-10-11
     */
    public <T, A> T doGet(Class<T> responseBodyType, A requestBody, URI uri, MediaType mediaType) {
        try {
            logger.info("uri:{}", uri);
            //请求添加token头
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(mediaType);
            
            HttpEntity<A> requestEntity = new HttpEntity<>(requestBody, headers);
            ResponseEntity<T> resEntity = restTemplate.exchange(uri, HttpMethod.GET, requestEntity, responseBodyType);
            logger.info("resEntity:{}", resEntity);
            //请求结果
            HttpStatus statusCode = resEntity.getStatusCode();
            if (statusCode == HttpStatus.OK) {
                Optional<T> body = Optional.ofNullable(resEntity.getBody());
                if (body.isPresent()) {
                    return body.get();
                }
            }
        } catch (Exception e) {
            logger.error("Class: RestTemplateUtil; method: doGet; uri:{}", uri, e);
            return null;
        }
        return null;
    }
}

标签:return,实现,RestTemplate,requestBody,headers,responseBodyType,resEntity,工具,logger
From: https://www.cnblogs.com/stubborn-dude/p/17756848.html

相关文章

  • 继承关系实现
    其实理解这个和理解面向对象的继承差不多                  ......
  • java RestTemplate集成HttpClient池化及异常重试
    解决存在网络隔离,首次连接请求被拒绝情况SocketException首次请求超时情况SocketTimeoutException无返回数据清空NoHttpResponseException进行重试importorg.apache.http.HttpEntityEnclosingRequest;importorg.apache.http.NoHttpResponseException;importorg.apache.htt......
  • 实现一个自动生成小学四则运算题目的命令行程序
    作业所属课程https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13016作业要求https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13016作业目标实现一个自动生成小学四则运算题目的命令行程序结对项目艾山·依力哈木+3120005145一......
  • 并查集的实现【学习算法】
    并查集的实现【学习算法】前言版权推荐并查集的实现最后前言2023-9-2614:38:02以下内容源自《【学习算法】》仅供学习交流使用版权禁止其他平台发布时删除以下此话本文首次发布于CSDN平台作者是CSDN@日星月云博客主页是禁止其他平台发布时删除以上此话推荐算法讲解056【必备】并......
  • 谈谈"求线段交点"的几种算法(js实现,完整版)
    谈谈"求线段交点"的几种算法(js实现,完整版)"求线段交点"是一种非常基础的几何计算,在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法说一说,希望对大家有所帮助. 本文讲的内容都很初级,主要是面向和我一样的初学者,所以请各位算法帝......
  • CFS(一)设计理念与实现架构
    前言本文对CFS的基础的设计理念以及在内核实现上的基本代码架构进行了分析,从宏观上梳理调度和CFS的脉络。本文所有的代码基于Linux4.19。CFS的设计理念和目标CFS(CompletelyFairScheduler)完全公平调度器,从字面上看定义的很清晰,首先CFS的本质是一个调度器,所谓调度就是决定CPU......
  • JS实现判断点是否在多边形范围内
    JS实现判断点是否在多边形范围内 一、说明在GIS领域,判断点是否在多边形范围内是一个基础方法,这里主要说下实现原理。原理比较简单,就是有一个GIS理论,一个点向一个方向发送射线,射线与多边形各个边相交的交点如果是奇数说明点在多边形范围内。 (图片引用自:https://blog.cs......
  • 在SQL Server数据库实现图片文件的存取
    --如果要将图片数据存入SQLServer数据库的表中,我们必须使用SQLServer的image数据类型。在很多时候,我们需要将图片文件存入到SQLServer数据库中,并且在使用的时候将数据库中的图片取出。本文将描述用C#语言来实现这一过程。数据库表结构如果要将图片数据存入SQLServer......
  • 2023年10月10日 KdMapper扩展实现之SOKNO S.R.L(speedfan.sys)
    1.背景  KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称speedfan.sys 时间戳50DF5......
  • 【Dotnet 工具箱】基于 .NET 6 和 Angular 构建项目任务管理平台
    1.Reha时间管理大师Rhea是一个基于C#和.NET6开发的在线任务管理平台,类似于禅道、Jira、Redmine,滴答清单等。支持多视图多维度统一管理任务。多级结构,工作区,空间,文件夹,列表,可以更灵活的进行任务管理。应用支持多主题和主题色切换,灵活搭配,随心所欲。Rhea使用的技术栈......