日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【spring boot】 使用 RestTemplate

發(fā)布時(shí)間:2024/9/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【spring boot】 使用 RestTemplate 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這里寫目錄標(biāo)題

  • 前言
  • 準(zhǔn)備
      • 引入 lib
      • 創(chuàng)建 RestTemplate Bean
  • 認(rèn)識(shí)一下RestTemplate
  • getForObject 示例
      • 簡單調(diào)用
      • 參數(shù)拼接
  • postForEntity 示例
      • 構(gòu)造 request Object
      • 在 URL 中傳參
  • postForObject 示例
      • 構(gòu)造 request Object
      • 在 URL 中傳參
  • (POST)Content-Type: application/x-www-form-urlencoded
  • (POST)Content-Type: application/json
  • (POST)Content-Type: application/json
  • postForEntity 與 postForObject 的區(qū)別

前言

  • spring-boot 2.0.0.RELEASE
  • spring-web 5.0.4.RELEASE
  • maven 3.5.0
  • Eclipse Version: 2019-09 R (4.13.0)
  • 使用 RestTemplate 調(diào)用 restful 接口
  • 官方說明在這里和這里

準(zhǔn)備

引入 lib

RestTemplate 類的完整路徑為 : org.springframework.web.client.RestTemplate 。
RestTemplate 類在 lib : spring-web 中。

springboot項(xiàng)目引入 lib:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>

創(chuàng)建 RestTemplate Bean

@Configuration public class RestTemplateConfig {@Beanpublic RestTemplate getRestTemplate() {return new RestTemplate();} }

說明:

  • 也可以不創(chuàng)建Bean。不創(chuàng)建Bean時(shí),需要每次new RestTemplate()。
  • 如果既不創(chuàng)建Bean,也不每次new RestTemplate(),則會(huì)遇到錯(cuò)誤No qualifying bean of type 'org.springframework.web.client.RestTemplate'

認(rèn)識(shí)一下RestTemplate

常用方法,getForEntity和getForObject方法、postForEntity和postForObject方法。ForEntity方法和ForObject方法的差別在于返回值。ResponseEntity類型的返回值可以獲取到完整的Response信息,比如header、http status。部分相關(guān)方法定義:

  • public <T> ResponseEntity<T> getForEntity(URI url, Class<T> responseType) throws RestClientException
  • public <T> T getForObject(URI url, Class<T> responseType) throws RestClientException
  • public <T> ResponseEntity<T> postForEntity(URI url, @Nullable Object request, Class<T> responseType) throws RestClientException
  • public <T> T postForObject(URI url, @Nullable Object request, Class<T> responseType) throws RestClientException

exchange方法更偏向于自己處理RequestEntity的情況。

getForObject 示例

簡單調(diào)用

String url = "https://www.so.com/s?q=abc"; // 將url返回的內(nèi)容,存入變量result中 String result = this.restTemplate.getForObject(url, String.class);

參數(shù)拼接

String url = "https://www.so.com/s?q={keyword}"; Map<String, String> paramMap = new HashMap<>(); paramMap.put("keyword", "abc"); // 將url返回的內(nèi)容,存入變量result中 String result = this.restTemplate.getForObject(url, String.class, paramMap);

postForEntity 示例

構(gòu)造 request Object

@Service public class DataSendService {@Autowiredprivate RestTemplate restTemplate;public void sendData() {String url = "http://localhost:8080/app/data-accept";HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);MultiValueMap<String, String> paramMap= new LinkedMultiValueMap<>();paramMap.add("name", "zhangsan");HttpEntity<MultiValueMap<String, String>> entity = null;entity = new HttpEntity<>(paramMap, headers);ResponseEntity<String> exchange = this.restTemplate.postForEntity(url, entity, String.class);String result = exchange.getBody();System.out.println(result);} }

在 URL 中傳參

@Service public class DataSendService {@Autowiredprivate RestTemplate restTemplate;public void sendData() {String url = "http://localhost:8080/app/data-accept?name={name}";ResponseEntity<String> exchange = this.restTemplate.postForEntity(url, null, String.class, "zhangsan");System.out.println(exchange.getBody());} }

postForObject 示例

構(gòu)造 request Object

@Service public class DataSendService {@Autowiredprivate RestTemplate restTemplate;public void sendData() {String url = "http://localhost:8080/app/data-accept";HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);MultiValueMap<String, String> paramMap= new LinkedMultiValueMap<>();paramMap.add("name", "zhangsan");HttpEntity<MultiValueMap<String, String>> entity = null;entity = new HttpEntity<>(paramMap, headers);String result = this.restTemplate.postForObject(url, entity, String.class);System.out.println(result);} }

在 URL 中傳參

@Service public class DataSendService {@Autowiredprivate RestTemplate restTemplate;public void sendData() {String url = "http://localhost:8080/app/data-accept?name={name}";String result = this.restTemplate.postForObject(url, null, String.class, "zhangsan");System.out.println(result);} }

(POST)Content-Type: application/x-www-form-urlencoded

@Service public class DataSendService {@Autowiredprivate RestTemplate restTemplate;public void sendData() {String url = "http://localhost:8080/app/data-accept";HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);MultiValueMap<String, String> paramMap= new LinkedMultiValueMap<>();paramMap.add("name", "zhangsan");HttpEntity<MultiValueMap<String, String>> entity = null;entity = new HttpEntity<>(paramMap, headers);String result = this.restTemplate.postForObject(url, entity, String.class);System.out.println(result);} }

(POST)Content-Type: application/json

@Service public class DataSendService {@Autowiredprivate RestTemplate restTemplate;public void sendData() {String url = "http://localhost:8080/app/data-accept";HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);JSONObject jsonBody = new JSONObject();jsonBody.put("name", "zhangsan");jsonBody.put("age", 18);HttpEntity<JSONObject> entity = null;entity = new HttpEntity<>(jsonBody , headers);String result = this.restTemplate.postForObject(url, entity, String.class);System.out.println(result);} }

(POST)Content-Type: application/json

@Service public class DataSendService {@Autowiredprivate RestTemplate restTemplate;public void sendData() {String url = "http://localhost:8080/app/data-accept";HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.TEXT_PLAIN);String message = "this is a text";HttpEntity<String > entity = null;entity = new HttpEntity<>(message , headers);String result = this.restTemplate.postForObject(url, entity, String.class);System.out.println(result);} }

postForEntity 與 postForObject 的區(qū)別

參數(shù)一樣,功能一樣,返回值類型不一樣。

public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType,Object... uriVariables) throws RestClientException {... } public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType,Map<String, ?> uriVariables) throws RestClientException {... } public <T> T postForObject(URI url, @Nullable Object request, Class<T> responseType)throws RestClientException {... } public <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request,Class<T> responseType, Object... uriVariables) throws RestClientException {... } public <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request,Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {... } @Override public <T> ResponseEntity<T> postForEntity(URI url, @Nullable Object request, Class<T> responseType)throws RestClientException {... }

總結(jié)

以上是生活随笔為你收集整理的【spring boot】 使用 RestTemplate的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。