java调第三方接口

这篇具有很好参考价值的文章主要介绍了java调第三方接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

背景

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);
上面的代码用ResponseEntity类接收老是报错,就改为用object接收了.
Object o = rt.postForObject(url, request, Object.class);
        String s = JSONObject.toJSONString(o);
        return s;
    }

}

如果是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;
    }

参数是是其他格式的我还没有研究过.遇到了再百度补充!文章来源地址https://www.toymoban.com/news/detail-448573.html

到了这里,关于java调第三方接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java对接第三方接口的三种方式

    在日常工作中,经常需要跟第三方系统对接,我们做为客户端,调用他们的接口进行业务处理,常用的几种调用方式有: 1.原生的Java.net.HttpURLConnection(jdk); 2.再次封装的HttpClient、CloseableHttpClient(Apache); 3.Spring提供的RestTemplate; 当然还有其他工具类进行封装的接口,比

    2024年04月28日
    浏览(42)
  • Java调用第三方http接口的常用方式

    前言 一、通过JDK网络类Java.net.HttpURLConnection 二、通过apache common封装好的HttpClient 三、通过Spring的RestTemplate 总结 今天项目需要接口互相调用,就看了一下这几个调用的方式 通过java.net包下的原生java.api提供的http请求 使用步骤: 通过统一的资源定位器(java.net.URL)获取连接器(java.

    2024年02月08日
    浏览(49)
  • JAVA开发(基于Restful的微服务第三方简易接口设计)

       一、需求背景 java后端需要提供接口服务,其中接口服务分为对内网的后台管理系统的接口,对外网的用户接口和对第三方系统的接口。这里主要讲对第三方的接口。 二、接口设计 我们可以参考微信小程序的接口,一般一个系统提供给第三方系统的接口都需要接口权限认

    2024年02月09日
    浏览(40)
  • JAVA调用第三方接口的GET/POST/PUT请求方式

    GET请求 POST请求 POST请求(JSON传参) PUT请求(传TOKEN)

    2024年02月03日
    浏览(48)
  • Java以form-data(表单)的形式调用第三方接口

    之前写的调用第三方接口: Java使用原生API调用第三方接口 但是其中只包含了简单的接口(传递数据为JSON)调用。也就是 Content-Type 的值是设置成: 当第三方接口需要包含 文件 类型的参数,我们要设置成以 表单形式 提交,就要那么该属性就应该设置成 表示是以 表单形式

    2024年02月02日
    浏览(47)
  • java通过httpclient携带请求头参数获取第三方文件流接口并实现实现文件下载

    创建httpclient 请求,并在header携带指定key,也可根据实际需要携带token等信息。获取第三方接口返回的文件输入流并写到本地response中,实现返回文件流,前端通过js的a标签进行下载。 代码如下: 前端js代码

    2024年02月16日
    浏览(36)
  • java发送http请求的几种方式,调用第三方接口的方法:HttpUtil、HttpURLConnection等

    参考:https://blog.csdn.net/yubin1285570923/article/details/126225347 put请求 post带请求头 get、delete类似… 使用JDK原生提供的net,无需其他jar包,代码如下: 需要用到commons-httpclient-3.1.jar,maven依赖如下: 看一下我实际应用的例子 需要用到httpclient-4.5.6.jar,maven依赖如下: RestTemplate 是由

    2024年01月18日
    浏览(40)
  • 【cmake学习】cmake 引入第三方库(头文件目录、库目录、库文件)

    程序的编写需要用到头文件,程序的编译需要lib文件,程序的运行需要dll文件,因此cmake引入第三方库其实就是将include目录、lib目录、bin目录引入工程。         目录 1、find_package(批量引入库文件和头文件) 2、include_directories(引入头文件目录) 3、link_directories(引入库

    2024年02月09日
    浏览(37)
  • php第三方阿里云接口

    阿里云 OpenAPI 开发者门户

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包