目錄
背景
Spring的RestTemplate
1.引入依賴
2.RestTemplate配置類
3.RestTemplate實現(xiàn)類
背景
java調(diào)第三方接口我百度的有三種方法.
第一種:通過JDK網(wǎng)絡(luò)類Java.net.HttpURLConnection
第二種:通過Apache common封裝好的HttpClient
第三種:通過Spring的RestTemplate
這個三種方法在我的scdn收藏里有,都是可以直接用的.
我今天對第三種方式通過Spring的RestTemplate 這個方法再進行詳細(xì)的說明下,補充一些細(xì)節(jié)?
下面代碼用到的LinkedMultiValueMap是用來傳form表單格式的參數(shù)的,例如:user=你&age=11
下面代碼用到的FileSystemResource是用來傳form表單格式中含file文件參數(shù)的.
LinkedMultiValueMap和FileSystemResource在我的收藏里都有詳細(xì)介紹,這里我就不多說了.
Spring的RestTemplate
1.引入依賴
導(dǎo)入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實現(xiàn)類
這個是公用的調(diào)接口類.僅適用于form-data表單形式.
/**
* 調(diào)用OCR接口,返回識別結(jié)果
*/
@Slf4j
@Component
public class ReadByOCRUtil {
@Autowired
private RestTemplate restTemplate;
/**
* 通用調(diào)接口方法
*
* @param url 接口url
* @param paramMap 參數(shù)
* @param mediaType 接口規(guī)定傳參格式
* @return 返回的結(jié)果
*/
public String doExchange(String url, HashMap<String, Object> paramMap, String mediaType) {
//header參數(shù)
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType(mediaType));
//放入body中的表單參數(shù)
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注入服務(wù)錯誤,于是我就改成了下面兩行代碼就不報錯了,
//至于什么原因后面再去研究補充
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請求方式,參數(shù)是用form-data格式,不含file文件那么用下面的代碼
/**
* 印章圖片識別
*
* @param base64 圖片絕對路徑的base64值
* @return 調(diào)接口返回的結(jié)果
*/
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請求方式,參數(shù)是用form-data格式,但是參數(shù)含file文件,那么用下面的代碼文章來源:http://www.zghlxwxcb.cn/news/detail-448573.html
/**
* 表格PDF識別
*
* @param absolutePath PDF文件絕對路徑
* @return OCR識別結(jié)果
*/
public String doFormPDF(String absolutePath) {
String url = "第三方接口的url";
String mediaType = "第三方接口要求的Content-Type形式";
//把臨時文件轉(zhuǎn)換成FileSystemResource
FileSystemResource resource = new FileSystemResource(absolutePath);
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("file", resource);// 對應(yīng)客戶端的接收參數(shù)名稱
String result = doExchange(url, paramMap, mediaType);
return result;
}
參數(shù)是是其他格式的我還沒有研究過.遇到了再百度補充!文章來源地址http://www.zghlxwxcb.cn/news/detail-448573.html
到了這里,關(guān)于java調(diào)第三方接口的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!