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包

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.4.RELEASE
    
 
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

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 paramMap, String mediaType) {
        //header参数
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType(mediaType));
        //放入body中的表单参数
        LinkedMultiValueMap param = new LinkedMultiValueMap<>();
        for (String key : paramMap.keySet()) {
            Object v = paramMap.get(key);
            param.add(key, v);
        }
        //组装
        HttpEntity> request = new HttpEntity<>(param, headers);
        ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.POST, request, String.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 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 paramMap = new HashMap<>();
        paramMap.put("file", resource);//	对应客户端的接收参数名称
        String result = doExchange(url, paramMap, mediaType);
        return result;
    }

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

你可能感兴趣的:(工具类,java)