您好,登錄后才能下訂單哦!
本篇內容介紹了“SpringBoot怎么使用RestTemplate來調用接口”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
使用RestTemplate來調用接口
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.client.ClientHttpRequestFactory;import org.springframework.http.client.SimpleClientHttpRequestFactory;import org.springframework.web.client.RestTemplate; /** * RestTemplate配置模板 * * @author like */@Configurationpublic class RestTemplateConfig { @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory) { return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory() { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setReadTimeout(5000);//單位為ms factory.setConnectTimeout(5000);//單位為ms return factory; } }
注意點:如果在編譯器中提示factory不能自動注入,那應該時跟其他類有沖突,有多個 ClientHttpRequestFactory
把這個factory的名字改一下,改成其他的就好了,比如這里就直接改成 simpleClientHttpRequestFactory
2.1postForObject方法
postForObject指post請求,并返回一個Object對象。
new HttpEntity(請求體)
new HttpEntity(請求頭)
new HttpEntity(請求體,請求頭)
2.1.1使用Json來傳遞和接收數據
首先引入fastJson的pom配置
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency>
在實現(xiàn)類中注入RestTemplate
接下來new一個 ExpressionDomain 對象,將這個對象轉化成JSONObject。使用Json來傳遞數據
public void postByDefault(){ ExpressionDomain expressionDomain=new ExpressionDomain("hello","hasaki","win"); JSONObject jsonObj = (JSONObject) JSONObject.toJSON(expressionDomain); //設置請求頭 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); //請求體 HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers); //發(fā)起請求 String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class); //將Json字符串解析成對象 Response resp = JSON.parseObject(jsonResult, new TypeReference<Response>() {});}
接收端
用@RequestBody注解一個參數,用于自動解析Json為對象。返回的Response也是一個對象,添加@ResponseBody注解,將返回Json字符串。解析的時候將Json字符串解析成對象即可。
和getForEntity原理是一樣的,下面會講到。
2.2getForObject方法
getForObject指get請求,并返回一個Object對象。這里有3種方法。
2.2.1
通過Map傳參數的方式 可以使用map來封裝請求參數,并作為getForObject的第三個參數,同時修改url如下,map中的"1"會替換url中的{1},"2"會替換url中的{2}
Map map = new HashMap();map.put("1", "hello");map.put("2", "world");String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class,map);
接口端:
@RequestMapping(value = "/getIds", method = RequestMethod.GET)public @ResponseBody String getIds(String param1, String param2) { return param1 + param2;}
2.2.2 通過可變參數的方式
也可以直接將要傳遞的值放到getForObject方法的參數結尾,數量不限,它會按順序替換{1}和{2}。接口端代碼還是和2.2.1的一樣
String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class, "hello", "world");
2.3getForEntity方法
getForEntity和getForObject的用法是一樣的,只是其返回結果是一個ResponseEntity,其中包含了更多的響應信息,比如:
ResponseEntity response = restTemplate.getForEntity("http://localhost:8081/getIds",String.class); response.getHeaders(); //響應頭 response.getStatusCode(); //響應碼 response.getBody(); //響應體,即前面的result
第1個參數:請求的url地址
第2個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
第3個參數:參數值,這里有Map和 可變參數兩種形式
第3個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
第4個參數:參數值,這里有Map和 可變參數兩種形式(通常用不到,數據通常放在Json里就全部傳輸過去了)
第1個參數:請求的url地址
第2個參數:其實是HttpEntity,這個類主要有三種構造方法,如下
1.新建一個配置類,配置RestTemplate的Bean
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.client.ClientHttpRequestFactory;import org.springframework.http.client.SimpleClientHttpRequestFactory;import org.springframework.web.client.RestTemplate; /** * RestTemplate配置模板 * * @author like */@Configurationpublic class RestTemplateConfig { @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory) { return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory() { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setReadTimeout(5000);//單位為ms factory.setConnectTimeout(5000);//單位為ms return factory; } }
注意點:如果在編譯器中提示factory不能自動注入,那應該時跟其他類有沖突,有多個 ClientHttpRequestFactory
把這個factory的名字改一下,改成其他的就好了,比如這里就直接改成 simpleClientHttpRequestFactory
2.1postForObject方法
postForObject指post請求,并返回一個Object對象。
new HttpEntity(請求體)
new HttpEntity(請求頭)
new HttpEntity(請求體,請求頭)
2.1.1使用Json來傳遞和接收數據
首先引入fastJson的pom配置
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency>
在實現(xiàn)類中注入RestTemplate
接下來new一個 ExpressionDomain 對象,將這個對象轉化成JSONObject。使用Json來傳遞數據
public void postByDefault(){ ExpressionDomain expressionDomain=new ExpressionDomain("hello","hasaki","win"); JSONObject jsonObj = (JSONObject) JSONObject.toJSON(expressionDomain); //設置請求頭 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); //請求體 HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers); //發(fā)起請求 String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class); //將Json字符串解析成對象 Response resp = JSON.parseObject(jsonResult, new TypeReference<Response>() {});}
接收端
用@RequestBody注解一個參數,用于自動解析Json為對象。返回的Response也是一個對象,添加@ResponseBody注解,將返回Json字符串。解析的時候將Json字符串解析成對象即可。
和getForEntity原理是一樣的,下面會講到。
2.2getForObject方法
getForObject指get請求,并返回一個Object對象。這里有3種方法。
2.2.1
通過Map傳參數的方式 可以使用map來封裝請求參數,并作為getForObject的第三個參數,同時修改url如下,map中的"1"會替換url中的{1},"2"會替換url中的{2}
Map map = new HashMap();map.put("1", "hello");map.put("2", "world");String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class,map);
接口端:
@RequestMapping(value = "/getIds", method = RequestMethod.GET)public @ResponseBody String getIds(String param1, String param2) { return param1 + param2;}
2.2.2 通過可變參數的方式
也可以直接將要傳遞的值放到getForObject方法的參數結尾,數量不限,它會按順序替換{1}和{2}。接口端代碼還是和2.2.1的一樣
String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class, "hello", "world");
2.3getForEntity方法
getForEntity和getForObject的用法是一樣的,只是其返回結果是一個ResponseEntity,其中包含了更多的響應信息,比如:
ResponseEntity response = restTemplate.getForEntity("http://localhost:8081/getIds",String.class); response.getHeaders(); //響應頭 response.getStatusCode(); //響應碼 response.getBody(); //響應體,即前面的result
@PostMapping("/testm") public ReturnResult show11(@RequestParam("id") String id, @RequestParam("name") String name) { System.out.println(id); UserInfo userInfo = userInfoMapper.selectByUserName(name); return ReturnResult.create(userInfo); }
這是restTemplate調用
//Post,@RequestParam---postForEntity @Test public void sho11() { String url = "http://127.0.0.1:8099/user/testm"; MultiValueMap<String, String> request = new LinkedMultiValueMap<>(); request.add("id", "12324"); request.add("name", "nanc"); ResponseEntity<ReturnResult> resp = restTemplate.postForEntity(url, request, ReturnResult.class); ReturnResult body = resp.getBody(); UserInfo data = body.getData(); System.err.println(data.getUserId()); System.out.println(data); }
第1個參數:請求的url地址
第2個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
第3個參數:參數值,這里有Map和 可變參數兩種形式
第3個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
第4個參數:參數值,這里有Map和 可變參數兩種形式(通常用不到,數據通常放在Json里就全部傳輸過去了)
第1個參數:請求的url地址
第2個參數:其實是HttpEntity,這個類主要有三種構造方法,如下
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.client.ClientHttpRequestFactory;import org.springframework.http.client.SimpleClientHttpRequestFactory;import org.springframework.web.client.RestTemplate; /** * RestTemplate配置模板 * * @author like */@Configurationpublic class RestTemplateConfig { @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory) { return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory() { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setReadTimeout(5000);//單位為ms factory.setConnectTimeout(5000);//單位為ms return factory; } }
注意點:如果在編譯器中提示factory不能自動注入,那應該時跟其他類有沖突,有多個 ClientHttpRequestFactory
把這個factory的名字改一下,改成其他的就好了,比如這里就直接改成 simpleClientHttpRequestFactory
2.1postForObject方法
postForObject指post請求,并返回一個Object對象。
第1個參數:請求的url地址
第2個參數:其實是HttpEntity,這個類主要有三種構造方法,如下
new HttpEntity(請求體)
new HttpEntity(請求頭)
new HttpEntity(請求體,請求頭)
第3個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
第4個參數:參數值,這里有Map和 可變參數兩種形式(通常用不到,數據通常放在Json里就全部傳輸過去了)
2.1.1使用Json來傳遞和接收數據
首先引入fastJson的pom配置
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency>
在實現(xiàn)類中注入RestTemplate
接下來new一個 ExpressionDomain 對象,將這個對象轉化成JSONObject。使用Json來傳遞數據
public void postByDefault(){ ExpressionDomain expressionDomain=new ExpressionDomain("hello","hasaki","win"); JSONObject jsonObj = (JSONObject) JSONObject.toJSON(expressionDomain); //設置請求頭 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); //請求體 HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers); //發(fā)起請求 String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class); //將Json字符串解析成對象 Response resp = JSON.parseObject(jsonResult, new TypeReference<Response>() {});}
接收端
用@RequestBody注解一個參數,用于自動解析Json為對象。返回的Response也是一個對象,添加@ResponseBody注解,將返回Json字符串。解析的時候將Json字符串解析成對象即可。
和getForEntity原理是一樣的,下面會講到。
2.2getForObject方法
getForObject指get請求,并返回一個Object對象。這里有3種方法。
第1個參數:請求的url地址
第2個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
第3個參數:參數值,這里有Map和 可變參數兩種形式
2.2.1
通過Map傳參數的方式 可以使用map來封裝請求參數,并作為getForObject的第三個參數,同時修改url如下,map中的"1"會替換url中的{1},"2"會替換url中的{2}
Map map = new HashMap();map.put("1", "hello");map.put("2", "world");String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class,map);
接口端:
@RequestMapping(value = "/getIds", method = RequestMethod.GET)public @ResponseBody String getIds(String param1, String param2) { return param1 + param2;}
2.2.2 通過可變參數的方式
也可以直接將要傳遞的值放到getForObject方法的參數結尾,數量不限,它會按順序替換{1}和{2}。接口端代碼還是和2.2.1的一樣
String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class, "hello", "world");
2.3getForEntity方法
getForEntity和getForObject的用法是一樣的,只是其返回結果是一個ResponseEntity,其中包含了更多的響應信息,比如:
ResponseEntity response = restTemplate.getForEntity("http://localhost:8081/getIds",String.class); response.getHeaders(); //響應頭 response.getStatusCode(); //響應碼 response.getBody(); //響應體,即前面的result
@PostMapping("/testm") public ReturnResult show11(@RequestParam("id") String id, @RequestParam("name") String name) { System.out.println(id); UserInfo userInfo = userInfoMapper.selectByUserName(name); return ReturnResult.create(userInfo); }
這是restTemplate調用
//Post,@RequestParam---postForEntity @Test public void sho11() { String url = "http://127.0.0.1:8099/user/testm"; MultiValueMap<String, String> request = new LinkedMultiValueMap<>(); request.add("id", "12324"); request.add("name", "nanc"); ResponseEntity<ReturnResult> resp = restTemplate.postForEntity(url, request, ReturnResult.class); ReturnResult body = resp.getBody(); UserInfo data = body.getData(); System.err.println(data.getUserId()); System.out.println(data); }
@GetMapping("/testp") public ReturnResult show22(@RequestParam String name, @RequestParam Integer age, @RequestParam String clazz) { System.out.println(name + "-" + age + "-" + clazz); UserInfo userInfo = userInfoMapper.selectByUserName(name); return ReturnResult.create(userInfo); }
resttemplate
//Get ,@RequestParam-----getForObject @Test public void sho12() { String url = "http://127.0.0.1:8099/rest/testp?name={name}&age={age}&clazz={clazz}"; Map<String, Object> map = new HashMap<>(); map.put("name", "nanc"); map.put("age", 34); map.put("clazz", "12"); ReturnResult forObject = restTemplate.getForObject(url, ReturnResult.class, map); UserInfo data = forObject.getData(); System.out.println(data); }
“SpringBoot怎么使用RestTemplate來調用接口”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。