Spring RestTemplate的使用與踩坑
引言
最近的項(xiàng)目需求中有使用到后端發(fā)送http請(qǐng)求,在網(wǎng)上尋找資料后發(fā)現(xiàn)可以使用spring自帶的RestTemplate類實(shí)現(xiàn),故作此記錄
項(xiàng)目使用
將下述代碼引入spring容器中(RestTemplate是spring自帶的發(fā)送http請(qǐng)求的類)
@Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory) { RestTemplate restTemplate = new RestTemplate(factory); return restTemplate; } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory() { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setReadTimeout(5000); factory.setConnectTimeout(15000); // 設(shè)置代理 //factory.setProxy(null); return factory; }
在需要使用的類中直接引入即可
@Autowired private RestTemplate restTemplate;
代碼示例
這里簡(jiǎn)單示例下post請(qǐng)求,如果又其它需求的可以去搜索一下其它文章
**注意:**發(fā)送的post的傳參的類型一定要是LinkedMultiValueMap
(不能使用jsonobject),否則會(huì)報(bào)找不到數(shù)據(jù)的錯(cuò)誤
@GetMapping("send") public String testPost(@RequestParam("code") Integer code){ String url = "http://localhost:8888/oauth/return"; LinkedMultiValueMap<String, Object> stringObjectLinkedMultiValueMap = new LinkedMultiValueMap<>(); stringObjectLinkedMultiValueMap.set("code",code); HttpEntity<LinkedMultiValueMap<String, Object>> jsonObjectHttpEntity = new HttpEntity<>(stringObjectLinkedMultiValueMap); ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity(url, jsonObjectHttpEntity, String.class); String body = stringResponseEntity.getBody(); return body; } @PostMapping("return") public String returnPost(@RequestParam Integer code){ return "哈首府帕斯發(fā)"; }
踩坑記錄
發(fā)送POST請(qǐng)求傳參的問(wèn)題
如下代碼,如果使用jsonobject來(lái)裝載數(shù)據(jù)發(fā)送post請(qǐng)求是會(huì)報(bào)錯(cuò)的,只能使用LinkedMultiValueMap
@GetMapping("keycloak/getToken") public String keycloakGetToken(@RequestParam Map<String,String> map){ //String code = requestObj.getString("code"); String url = "http://localhost:8081/auth/realms/myRealm/protocol/openid-connect/token"; String code = map.get("code"); System.out.println("傳進(jìn)來(lái)的code:"+code); //HttpHeaders headers = new HttpHeaders(); //JSONObject jsonObject = new JSONObject(); //jsonObject.put("grant_type","authorization_code"); //jsonObject.put("code",code); //jsonObject.put("client_id","myclient"); //jsonObject.put("client_secret","LsvDoZ5g0BQhRDR9ydYqV9tjal8YDeAI"); //jsonObject.put("scope","openid"); //jsonObject.put("redirect_uri","http://localhost:8888/oauth/keycloak/getToken"); //HttpEntity<JSONObject> jsonObjectHttpEntity = new HttpEntity<>(jsonObject,headers); LinkedMultiValueMap<String, Object> stringObjectLinkedMultiValueMap = new LinkedMultiValueMap<>(); stringObjectLinkedMultiValueMap.set("grant_type","authorization_code"); stringObjectLinkedMultiValueMap.set("code",code); stringObjectLinkedMultiValueMap.set("client_id","myclient"); stringObjectLinkedMultiValueMap.set("client_secret","LsvDoZ5g0BQhRDR9ydYqV9tjal8YDeAI"); stringObjectLinkedMultiValueMap.set("scope","openid"); stringObjectLinkedMultiValueMap.set("redirect_uri","http://localhost:8888/oauth/keycloak/getToken"); HttpEntity<LinkedMultiValueMap<String, Object>> jsonObjectHttpEntity = new HttpEntity<>(stringObjectLinkedMultiValueMap); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, jsonObjectHttpEntity, String.class); String body = responseEntity.getBody(); return body; }
到此這篇關(guān)于Spring RestTemplate的使用與踩坑的文章就介紹到這了,更多相關(guān)Spring RestTemplate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot-RestTemplate實(shí)現(xiàn)調(diào)用第三方API的方式
- Springboot使用RestTemplate調(diào)用第三方接口的操作代碼
- Spring?RestTemplate遠(yuǎn)程調(diào)用過(guò)程
- SpringCloud基于RestTemplate微服務(wù)項(xiàng)目案例解析
- Springboot?RestTemplate設(shè)置超時(shí)時(shí)間的簡(jiǎn)單方法
- 解析Spring RestTemplate必須搭配MultiValueMap的理由
- Springboot之restTemplate的配置及使用方式
相關(guān)文章
Java的@Transactional、@Aysnc、事務(wù)同步問(wèn)題詳解
這篇文章主要介紹了Java的@Transactional、@Aysnc、事務(wù)同步問(wèn)題詳解,現(xiàn)在我們需要在一個(gè)業(yè)務(wù)方法中插入一個(gè)用戶,這個(gè)業(yè)務(wù)方法我們需要加上事務(wù),然后插入用戶后,我們要異步的方式打印出數(shù)據(jù)庫(kù)中所有存在的用戶,需要的朋友可以參考下2023-11-11Java ArrayDeque實(shí)現(xiàn)Stack的功能
這篇文章主要介紹了Java ArrayDeque實(shí)現(xiàn)Stack功能的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03Java排序算法三之歸并排序的遞歸與非遞歸的實(shí)現(xiàn)示例解析
這篇文章主要介紹了Java排序算法三之歸并排序的遞歸與非遞歸的實(shí)現(xiàn)示例解析,文章通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08springboot使用GuavaCache做簡(jiǎn)單緩存處理的方法
這篇文章主要介紹了springboot使用GuavaCache做簡(jiǎn)單緩存處理的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01spring?boot只需兩步優(yōu)雅整合activiti示例解析
這篇文章主要主要來(lái)教大家spring?boot優(yōu)雅整合activiti只需兩步就可完成測(cè)操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步2022-03-03Javaweb實(shí)現(xiàn)上傳下載文件的多種方法
本篇文章主要介紹了Javaweb實(shí)現(xiàn)上傳下載文件,有多種實(shí)現(xiàn)方式,需要的朋友可以參考下。2016-10-10Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問(wèn)對(duì)象DAO模式的方法
Data Access Object數(shù)據(jù)訪問(wèn)對(duì)象模式在Java操作數(shù)據(jù)庫(kù)部分的程序設(shè)計(jì)中經(jīng)常被使用到,這里我們就來(lái)看一下Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問(wèn)對(duì)象DAO模式的方法:2016-06-06Java字符串?dāng)?shù)字左右補(bǔ)全0的四種方式
這篇文章主要給大家介紹了關(guān)于Java字符串?dāng)?shù)字左右補(bǔ)全0的四種方式,在編程中有時(shí)候我們需要對(duì)一個(gè)字符串進(jìn)行字符填充,以滿足某些特定的要求,其中補(bǔ)全0是一種常見(jiàn)的需求,需要的朋友可以參考下2023-08-08