restTemplate请求接口转发(包含普通get,post请求和下载)

此代码包含普通getpost请求和下载,代码如下:

@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}}
@Data
public class CustomButtonRequestDto {@ApiModelProperty(value = "接口请求路径", required = true)private String url;@ApiModelProperty(value = "接口请求方式", required = true)private String requestMethod;@ApiModelProperty(value = "请求头信息")private Map<String, String> headers;@ApiModelProperty(value = "接口请求参数")private Map<String, Object> parameters;@ApiModelProperty(value = "get请求时必传:普通请求 DEFAULT,下载请求 DOWNLOAD")private String interfaceType;@ApiModelProperty(value = "post请求时 需要直接传集合时: LIST")private String parameterPassingModeFlag;
}
@Slf4j
@Service
public class CustomButtonService {@Autowiredprivate RestTemplate restTemplate;public Object customButtonRequest(CustomButtonRequestDto customButtonRequestDto,HttpServletRequest request) {log.info("自定义按钮请求接口customButtonRequestDto:{}", JSONObject.toJSON(customButtonRequestDto));String requestMethod = customButtonRequestDto.getRequestMethod();if (StringUtils.isEmpty(requestMethod)) {return null;}Map<String, String> header = customButtonRequestDto.getHeaders();Map<String, Object> parameters = customButtonRequestDto.getParameters();String url = customButtonRequestDto.getUrl();HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.set("Accept", "application/json");headers.set("Authorization", request.getHeader("Authorization"));headers.set("loginName", request.getHeader("loginName"));headers.set("Brand",request.getHeader("Brand"));switch (requestMethod) {case "get":setHeader(header, headers);try {StrBuilder strParam = StrBuilder.create();String strUrlParam = "";String urlParamPlaceholder = "";if (MapUtil.isNotEmpty(parameters)) {if (url.contains("?")) {Iterator<Map.Entry<String, Object>> iterator = parameters.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, Object> entry = iterator.next();if (entry.getValue() instanceof Collection) {urlParamPlaceholder = new Gson().toJson(entry.getValue());strParam.append("&").append("selectedFields").append("=").append("{urlParamPlaceholder}");} else {strParam.append("&").append(entry.getKey()).append("=").append(entry.getValue());}}strUrlParam = strParam.toString();} else {strParam.append("?");Iterator<Map.Entry<String, Object>> iterator = parameters.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, Object> entry = iterator.next();if (entry.getValue() instanceof Collection) {urlParamPlaceholder = new Gson().toJson(entry.getValue());strParam.append("selectedFields").append("=").append("{urlParamPlaceholder}").append("&");} else {strParam.append(entry.getKey()).append("=").append(entry.getValue()).append("&");}}strUrlParam = StrUtil.removeSuffix(strParam, "&");}}// 普通get请求接口log.info("get请求接口开始");if (StringUtils.isNotEmpty(customButtonRequestDto.getInterfaceType()) && "DEFAULT".equals(customButtonRequestDto.getInterfaceType())) {HttpEntity<String> getHttpEntity = new HttpEntity<>(null, headers);ResponseEntity<String> getResponse = restTemplate.exchange(url + strUrlParam, HttpMethod.GET, getHttpEntity, String.class, urlParamPlaceholder);return getResponse.getBody();}// 下载get请求接口if (StringUtils.isNotEmpty(customButtonRequestDto.getInterfaceType()) && "DOWNLOAD".equals(customButtonRequestDto.getInterfaceType())) {HttpEntity<MultiValueMap<String, Object>> getHttpEntity = new HttpEntity<MultiValueMap<String, Object>>(null, headers);ResponseEntity<byte[]> getResponse = restTemplate.exchange(url + strUrlParam, HttpMethod.GET, getHttpEntity, byte[].class);return getResponse;}} catch (Exception e) {log.info("异常信息:{}", e);if(e instanceof HttpClientErrorException){throw e;}return Response.buildFailure();}case "post":setHeader(header, headers);if (StringUtils.isNotEmpty(customButtonRequestDto.getInterfaceType()) && "DOWNLOAD".equals(customButtonRequestDto.getInterfaceType())) {if (StringUtils.isNotBlank(customButtonRequestDto.getParameterPassingModeFlag()) && customButtonRequestDto.getParameterPassingModeFlag().equals("LIST")) {HttpEntity postHttpEntity = new HttpEntity<>(MapUtil.isNotEmpty(parameters) ? parameters.get("selectedFields") : "", headers);ResponseEntity<byte[]> responseEntity = restTemplate.exchange(url, HttpMethod.POST, postHttpEntity, byte[].class);return responseEntity;}HttpEntity postHttpEntity = new HttpEntity<>(MapUtil.isNotEmpty(parameters) ? parameters : "", headers);ResponseEntity<byte[]> responseEntity = restTemplate.exchange(url, HttpMethod.POST, postHttpEntity, byte[].class);return responseEntity;} else {if (StringUtils.isNotBlank(customButtonRequestDto.getParameterPassingModeFlag()) && customButtonRequestDto.getParameterPassingModeFlag().equals("LIST")) {HttpEntity postHttpEntity = new HttpEntity<>(MapUtil.isNotEmpty(parameters) ? parameters.get("selectedFields") : "", headers);String jsonObject = restTemplate.postForObject(url, postHttpEntity, String.class);return jsonObject;}HttpEntity postHttpEntity = new HttpEntity<>(MapUtil.isNotEmpty(parameters) ? parameters : "", headers);String jsonObject = restTemplate.postForObject(url, postHttpEntity, String.class);return jsonObject;}default:return null;}}private static void setHeader(Map<String, String> header, HttpHeaders headers) {if (MapUtil.isNotEmpty(header)) {Iterator<Map.Entry<String, String>> iterator = header.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> entry = iterator.next();headers.set(entry.getKey(), entry.getValue());}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTA天梯 L2-001 紧急救援

作为一个城市的应急救援队伍的负责人&#xff0c;你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候&#xff0c;你的任务是带领你的…

组合逻辑电路(一)(加法器)

目录 组合逻辑电路的特点及功能描述 采用SSI的组合逻辑电路的分析与设计 采用SSI的组合逻辑电路的分析 采用SII的组合逻辑电路的设计 例 例 例 常用的MSI组合逻辑电路 半加器 全加器 加法器 串行进位加法器 例 例 超前进位加法器 组合逻辑电路的特点及功能描述 小规模集成…

原生微信小程序电影购票+后台管理系统[含文档]

简介 正文获取联系方式&#xff01;❤❤❤关于JAVA/小程序/安卓/PHP/Python/C#/ASP.NET/大数据/爬虫/数据可视化都可推荐选题和提供专业的指导和支持。 【毕设源码推荐项目】基于原生微信小程序电影购票系统 适用于计算机类毕业设计&#xff0c;本系统功能完整&#xff0c;适合…

TypeScript新手指南:何时使用.ts,何时转向.tsx?

在TypeScript中&#xff0c;.ts和.tsx文件扩展名代表两种不同的文件类型&#xff1a; .ts&#xff1a;这是一个标准的TypeScript文件&#xff0c;它可以包含TypeScript代码&#xff0c;该代码最终会被编译成JavaScript。.ts文件通常不包含JSX代码&#xff0c;JSX是一种JavaScri…

基础小白快速入门并行计算------>我们为什么要学习并行计算

什么是并行计算&#xff1f; 随着计算机的不断发展&#xff0c;我们处理的数据不断变多&#xff0c;需要更大得到处理能力、我们希望计算机有着更大更强壮的计算能力&#xff0c;由于cpu的运行能力有限&#xff0c;我们便想到了将多个cpu进行串联计算问题&#xff0c;这也就是我…

AtCoder Beginner Contest 343(A,B,C,D,E,F)

比赛链接 CE是暴力&#xff0c;D是数据结构题&#xff0c;F是线段树。这场的E比较有意思&#xff0c;其他的感觉有点水。 A - Wrong Answer 题意&#xff1a; 给你两个数 A , B A,B A,B ( 0 ≤ A , B ≤ 9 ) (0\le A,B\le 9) (0≤A,B≤9)&#xff0c;返回一个个位数&#…

Java类加载流程?

Java类加载过程是指将.class文件中的字节码数据加载到内存中&#xff0c;并生成对应的Class对象的过程。Java类加载器&#xff08;ClassLoader&#xff09;负责执行这个任务。Java类加载过程主要包括以下几个步骤&#xff1a; 加载&#xff08;Loading&#xff09;&#xff1a;…

Codeforces Round 883 (Div. 3)(集训队加训1)

A.如果钉子与地面距离大于绳子的长度就必须剪 #include<bits/stdc.h> #define eps 1e-5 #define INF 1e9 using namespace std; typedef long long ll; const int N 2e6 9; int a[N],b[N],cl[N]; void Lan(){int n;cin>>n;for(int i1;i<n;i){cin>>a[i]…

如何提高项目成功率?分享20 种项目管理工具、技术和软件

本文将分享20种项目管理常用的工具、技术和软件&#xff0c;比如项目管理软件 PingCode、Worktile、Redmine、Jira、SAP、PrimaveraSystems等&#xff1b;项目计划阶段工具和技术WBS、甘特图、PERT图、风险评估矩阵等等。 项目管理是确保项目成功交付的关键&#xff0c;它涉及到…

Java学习笔记009——局部内部类(需配合接口使用)

局部内部类&#xff08;Local Inner Classes&#xff09;在Java中是一种非常有用的特性&#xff0c;尽管它们的使用场景相对较少。局部内部类定义在一个方法、构造器或代码块中&#xff0c;而不是在类的顶层。这样的设计有几个主要的意义&#xff1a; 1. 代码组织&#xff1a;…

【产品文档分类及撰写路径】

一、产品文档的分类 产品文档根据所处阶段和面相对象的差异大致可以分为三类&#xff1a; 商业需求文档 (BRD)&#xff1a;商业需求文档是面向公司高层和项目组&#xff0c;目的是为了获得资金、资源支持。市场需求文档 (MRD)&#xff1a;市场需求文档是面向运营和市场销售人员…

【重要!!退税!退税!】一年一度个人所得税综合年度汇算开始了!

目录标题 如何退税&#xff1f;2023年度个人所得税综合所得汇算清缴操作指南汇算准备标准申报 退税骗局&#xff1f;1.“您有一笔退税待领取”骗局2.“专业人员帮你多退税”骗局3.“诱导填报虚假个税信息”骗局4.“税务稽查人员联系你”骗局 如何退税&#xff1f; 2023年度个人…

2024年腾讯云优惠政策_腾讯云服务器特价购买活动入口

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

网络编程作业day7

作业项目&#xff1a;基于UDP的聊天室 服务器代码&#xff1a; #include <myhead.h>//定义客户信息结构体 typedef struct magtye {char type; //消息类型char name[100]; //客户姓名char text[1024]; //客户发送聊天信息 }msg_t;//定义结构体存储…

类的关系 继承(Inheritance)、聚合(Aggregation)和关联(Association)

前言 在面向对象编程中&#xff0c;类之间的关系主要有以下几种&#xff1a;继承&#xff08;Inheritance&#xff09;、聚合&#xff08;Aggregation&#xff09;和关联&#xff08;Association&#xff09;。每种关系在对象的创建和销毁时&#xff0c;构造函数和析构函数的调…

刷题日记:面试经典 150 题 DAY5

刷题日记&#xff1a;面试经典 150 题 DAY4 125. 验证回文串28. 找出字符串中第一个匹配项的下标151. 反转字符串中的单词6. Z 字形变换68. 文本左右对齐 125. 验证回文串 原题链接 125. 验证回文串 双指针&#xff0c;一前一后&#xff0c;遇到非数字字母跳过即可 class So…

腾讯云哪款服务器最便宜划算?2024腾讯云服务器优惠价格表

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

TCP三次握手四次挥手

目录 TCP报文 ☞ 标志位 TCP状态变迁图&#xff1a; 三次握手 为什么要三次握手&#xff1f; 客户端与服务端接口状态 客户端&#xff1a; 服务端&#xff1a; 第一次握手&#xff1a; 第二次握手&#xff1a; 第三次握手&#xff1a; 四次挥手&#xff1a; 四次挥…

火爆全网,软件测试数据库常用 SQL 语句总结,你要的我都有......

前言 直接上干货 数据定义语言(DDL) 主要负责数据库、数据表、视图、键、索引等结构化的操作 常用的语句有&#xff1a;CREATE DATABASE、CREATE TABLE、ALTER TABLE等 字段的常用约束有&#xff1a;PRIMARY KEY、FOREIGN KEY、NOT NULL、UNIQUE、AUTO_INCREMENT、DEFAULT 常…

onnx模型优化利器onnxoptimizer、onnxsim

ONNX性能优化和调试技巧 - 知乎ONNX模型是一种跨平台、跨框架的模型表示格式,允许用户在不同的深度学习框架之间共享模型和数据,从而加速模型开发和部署。然而,在实际应用中,我们通常需要对ONNX模型进行性能优化和调试,以确保其在不同硬件和…https://zhuanlan.zhihu.com/…