java调第三方接口

2023-11-13

目录

背景

Spring的RestTemplate

1.引入依赖

2.RestTemplate配置类

3.RestTemplate实现类


背景

java调第三方接口我百度的有三种方法.

第一种:通过JDK网络类Java.net.HttpURLConnection

第二种:通过Apache common封装好的HttpClient

第三种:通过Spring的RestTemplate

这个三种方法在我的scdn收藏里有,都是可以直接用的.

我今天对第三种方式通过Spring的RestTemplate 这个方法再进行详细的说明下,补充一些细节 

下面代码用到的LinkedMultiValueMap是用来传form表单格式的参数的,例如:user=你&age=11

下面代码用到的FileSystemResource是用来传form表单格式中含file文件参数的.

LinkedMultiValueMap和FileSystemResource在我的收藏里都有详细介绍,这里我就不多说了.

Spring的RestTemplate

1.引入依赖

导入springboot的web包

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
    </parent>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.RestTemplate配置类

/**
 * @author hsq
 */
@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(15000);
        return factory;
    }
}

3.RestTemplate实现类

这个是公用的调接口类.仅适用于form-data表单形式.

/**
 * 调用OCR接口,返回识别结果
 */
@Slf4j
@Component
public class ReadByOCRUtil {
    @Autowired
    private RestTemplate restTemplate;

    /**
     * 通用调接口方法
     *
     * @param url       接口url
     * @param paramMap  参数
     * @param mediaType 接口规定传参格式
     * @return 返回的结果
     */
    public String doExchange(String url, HashMap<String, Object> paramMap, String mediaType) {
        //header参数
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType(mediaType));
        //放入body中的表单参数
        LinkedMultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
        for (String key : paramMap.keySet()) {
            Object v = paramMap.get(key);
            param.add(key, v);
        }
        //组装
        HttpEntity<LinkedMultiValueMap<String, Object>> request = new HttpEntity<>(param, headers);
        //ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
        //上面注释的一行是我一开始用的,但是自从项目更新用了nacos后,就会报service注入服务错误,于是我就改成了下面两行代码就不报错了,
        //至于什么原因后面再去研究补充
        RestTemplate rt = new RestTemplate();
        ResponseEntity<String> responseEntity = rt.postForObject(url, request, ResponseEntity.class);
        String body = responseEntity.getBody();
        return body;
    }

}

如果是POST请求方式,参数是用form-data格式,不含file文件那么用下面的代码

    /**
     * 印章图片识别
     *
     * @param base64 图片绝对路径的base64值
     * @return 调接口返回的结果
     */
    public String doStamp(String base64) {
        String url = "第三方接口的url";
        String mediaType = "第三方接口要求的Content-Type形式";
        HashMap<String, Object> paramMap = new HashMap<>();
        paramMap.put("img", base64);
        String s = doExchange(url, paramMap, mediaType);
        return s;
    }

如果是POST请求方式,参数是用form-data格式,但是参数含file文件,那么用下面的代码

    /**
     * 表格PDF识别
     *
     * @param absolutePath PDF文件绝对路径
     * @return OCR识别结果
     */
    public String doFormPDF(String absolutePath) {
        String url = "第三方接口的url";
        String mediaType = "第三方接口要求的Content-Type形式";
        //把临时文件转换成FileSystemResource
        FileSystemResource resource = new FileSystemResource(absolutePath);
        HashMap<String, Object> paramMap = new HashMap<>();
        paramMap.put("file", resource);//	对应客户端的接收参数名称
        String result = doExchange(url, paramMap, mediaType);
        return result;
    }

参数是是其他格式的我还没有研究过.遇到了再百度补充!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java调第三方接口 的相关文章

随机推荐

  • 好用的资源推荐

    前端 扁平化前端css框架 materializecss 很喜欢里面的组件和javascript的调用方式 简单易用多组件好看的css框架 semantic ui 简单好看的基于jquery的消息提示框 CodeSeven toastr 好
  • Java小技巧:避免缓存,Java动态加载配置文件

    Java动态加载配置文件 关键 每次读取都要重新生成流 今天无意间在项目的代码中看到如下这样一段简单加载配置文件的代码 Properties prop new Properties InputStream in PropertiesTest
  • 瀑布流&下拉加载

    瀑布流结合列表下拉加载动画过渡展示 前言 需求默认瀑布流展示列表 下拉加载的时候看到列表顺序过渡加载 1 效果样式 如下 下拉瀑布流加载图片列表 2 引入文件 用到macyjs瀑布流与下拉加载插件mescroll mescroll官网 ht
  • 数据结构学习系列之顺序表的两种插入方式

    方式1 在顺序表末端插入数据元素 代码如下 示例代码 int insert seq list 1 list t seq list int data if NULL seq list printf 入参为NULL n return 1 if
  • 【学习之路】axios之axios.CancelToken

    写法 接受一个回调函数作为参数 new axios CancelToken cancel gt cancel是取消本次请的方法 if xxx cancel else TODO 一般用法 用于发出多个相同请求时 取消重复请求 使用场景 使用数
  • 虚拟机:[Errno 256] No more mirrors to try

    使用linux系统的yum命令去安装一些软件时总是会出现各种问题 下面总结一下 首先确认yum搭建成功 使用mount挂载 每次开虚拟机 都记得要mount挂载 因为这个mount是暂时的 关机后下次就必须重新挂载 不然yum无法正常进行
  • 微信小程序隐藏滚动条的方法,以及禁止上下滑动的方法

    webkit scrollbar display none width 0 height 0 color transparent ms scrollbar display none width 0 height 0 color transp
  • android 手机网络接入点名称及WAP、NET模式的区别

    移动 电信 联通 APN cmwap cmnet ctwap ctnet 3gwap uniwap 3gnet uninet设置 APN Access Point Name 即 接入点名称 用来标识GPRS的业务种类 目前分为两大类 CMW
  • PACS系统源码 PACS源码 基于VC + MSSQL开发

    基于VC MSSQL开发的一套大型医院医学影像PACS系统源码 有演示 文末获取联系 PACS系统可以覆盖医院现有放射 CT MR 核医学 超声 内镜 病理 心电等绝大部分DICOM和非DICOM检查设备 支持从科室级 全院级 集团医院级乃
  • @RequestMapping注解和Controller方法建立映射的流程

    当你的才华还撑不起你的野心的时候 唯有静下心来学习 有没有想过 为什么在controller类的方法上 添加一个 RequestMapping toIndex 注解的时候 从浏览器的输入localhost 8080 toIndex请求就可以
  • vscode 配置c/c++环境,与python共用。

    每个人的电脑路径因人而异 下面只是我的配置 仅供参 参考 vscode的安装以及插件软件的安装根据另一个博主的帖子 https blog csdn net weixin 44049923 article details 103619882
  • 小黄的刷题之路(十七)——码题集OJ赛-循环移位

    文章目录 一 题目 二 分析思路 2 1 审题理解 2 2 思路 三 代码实现 3 1 C 实现 四 总结 一 题目 二 分析思路 2 1 审题理解 给我们一个正整数序列 如果能够通过若干次循环左移调整成一个升序序列 那就输出 YES 否则
  • Unity2D--给动画添加关键帧并绑定事件

    关键帧 一添加关键帧 在Animation面板中添加关键帧 二给关键帧绑定事件 添加关键帧后可以先点击关键帧 然后在Inspector面板中绑定事件 Function为方法名
  • Filter实现权限过滤

    有这么一个简单的要求 用户只有登录才能进入主页 一旦退出就无法进入主页 看似好像生来就该如此但代码层次却不简单 首先要判断用户登录状态 然后拦截判断 后面还会学习拦截器 web文件夹下新建一个文件夹名为sys 该文件夹新建jsp页面名为su
  • Linux 查看磁盘空间

    1 查看当前目录的总大小 du sh ps du disk usage 2 查看某个目录的总大小 du sh 目录名 du后面可以跟的参数含义 a 列出所有的文件与目录容量 因为默认仅统计目录底下的文件量而已 h 以人们较易读的容量格式 G
  • Deep Learning 大体概念和事情

    0 深度学习为什么可能 因为一个事物的发生 其背后总有一个理型 或者叫做规律性 这个规律性就体现在原因与结果的作用关系里 把大多数原因和结果进行量化之后 结果与原因间存在一个数量关系方程 使得 结果 f 众原因 找出来这个大致的方程 f 便
  • 前端 Websocket + Stomp.js 的使用

    什么是Stomp STOMP即Simple or Streaming Text Orientated Messaging Protocol 简单 流 文本定向消息协议 它提供了一个可互操作的连接格式 允许STOMP客户端与任意STOMP消息
  • 【蓝桥OJ——C语言】顺子日期、特殊时间、乘积尾零

    文章目录 顺子日期 特殊时间 乘积尾零 总结 顺子日期 小明特别喜欢顺子 顺子指的就是连续的三个数字 123 456 等 顺子日期指的就是在日期的 yyyymmdd 表示法中 存在任意连续的三位数是一个顺子的日期 例如 20220123 就
  • 【Vue学习笔记】- 模板语法

    Vue模板语法分为两大类 插值语法 指令语法 插值语法 功能 作用于标签体内 目的是解析内容 写法 xxx xxx 是js表达式或data中的数据 指令语法 功能 作用于标签自身 可解析 标签属性 标签体内容 绑定事件 举例 v bind
  • java调第三方接口

    目录 背景 Spring的RestTemplate 1 引入依赖 2 RestTemplate配置类 3 RestTemplate实现类 背景 java调第三方接口我百度的有三种方法 第一种 通过JDK网络类Java net HttpURL