一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot 如何使用RestTemplate來調用接口

SpringBoot 如何使用RestTemplate來調用接口

2022-02-26 00:33奚學長又裝死 Java教程

這篇文章主要介紹了SpringBoot 如何使用RestTemplate來調用接口方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用RestTemplate來調用接口

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

SpringBoot 如何使用RestTemplate來調用接口

2.多種傳輸和接收參數的方式

2.1postForObject方法

postForObject指post請求,并返回一個Object對象。

new HttpEntity(請求體)

new HttpEntity(請求頭)

new HttpEntity(請求體,請求頭)

SpringBoot 如何使用RestTemplate來調用接口

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>

在實現類中注入RestTemplate

SpringBoot 如何使用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);        //發起請求    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字符串解析成對象即可。

SpringBoot 如何使用RestTemplate來調用接口

postForEntity

和getForEntity原理是一樣的,下面會講到。

2.2getForObject方法

getForObject指get請求,并返回一個Object對象。這里有3種方法。

SpringBoot 如何使用RestTemplate來調用接口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}&param2={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}&param2={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

RestTemplate調用接口總結


  • 第1個參數:請求的url地址
  • 第2個參數:其實是HttpEntity,這個類主要有三種構造方法,如下
  • 第3個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
  • 第4個參數:參數值,這里有Map和 可變參數兩種形式(通常用不到,數據通常放在Json里就全部傳輸過去了)
  • 第1個參數:請求的url地址
  • 第2個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
  • 第3個參數:參數值,這里有Map和 可變參數兩種形式
  • 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

    SpringBoot 如何使用RestTemplate來調用接口

    2.多種傳輸和接收參數的方式

    2.1postForObject方法

    postForObject指post請求,并返回一個Object對象。

    new HttpEntity(請求體)

    new HttpEntity(請求頭)

    new HttpEntity(請求體,請求頭)

    SpringBoot 如何使用RestTemplate來調用接口

    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>

    在實現類中注入RestTemplate

    SpringBoot 如何使用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);        //發起請求    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字符串解析成對象即可。

    SpringBoot 如何使用RestTemplate來調用接口

    postForEntity

    和getForEntity原理是一樣的,下面會講到。

    2.2getForObject方法

    getForObject指get請求,并返回一個Object對象。這里有3種方法。

    SpringBoot 如何使用RestTemplate來調用接口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}&param2={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}&param2={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

    RestTemplate調用接口總結

    1.這是接口信息

        @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);      }

    2.接口

    • 第1個參數:請求的url地址
    • 第2個參數:其實是HttpEntity,這個類主要有三種構造方法,如下
    • 第3個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
    • 第4個參數:參數值,這里有Map和 可變參數兩種形式(通常用不到,數據通常放在Json里就全部傳輸過去了)
    • 第1個參數:請求的url地址
    • 第2個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
    • 第3個參數:參數值,這里有Map和 可變參數兩種形式

 

使用RestTemplate來調用接口

 

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

SpringBoot 如何使用RestTemplate來調用接口

2.多種傳輸和接收參數的方式

2.1postForObject方法

postForObject指post請求,并返回一個Object對象。

  • 第1個參數:請求的url地址
  • 第2個參數:其實是HttpEntity,這個類主要有三種構造方法,如下

new HttpEntity(請求體)

new HttpEntity(請求頭)

new HttpEntity(請求體,請求頭)

  • 第3個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
  • 第4個參數:參數值,這里有Map和 可變參數兩種形式(通常用不到,數據通常放在Json里就全部傳輸過去了)

SpringBoot 如何使用RestTemplate來調用接口

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>

在實現類中注入RestTemplate

SpringBoot 如何使用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);        //發起請求    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字符串解析成對象即可。

SpringBoot 如何使用RestTemplate來調用接口

postForEntity

和getForEntity原理是一樣的,下面會講到。

2.2getForObject方法

getForObject指get請求,并返回一個Object對象。這里有3種方法。

  • 第1個參數:請求的url地址
  • 第2個參數:返回的結果類型,這里String.class表示返回結果是一個字符串。
  • 第3個參數:參數值,這里有Map和 可變參數兩種形式

SpringBoot 如何使用RestTemplate來調用接口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}&param2={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}&param2={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

RestTemplate調用接口總結

1.這是接口信息

    @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);      }

2.接口

    @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);    } 

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/likekobe2012/article/details/82663725

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产激情视频 | 边摸边吃奶又黄激烈视频韩国 | 全彩成人18h漫画 | 百合女女师生play黄肉黄 | 日本黄a | 国产高清精品自在久久 | 欧美成人免费观看的 | 国产一级特黄aa大片在线 | 五月天淫 | 日韩国产成人精品视频人 | 99热精品在线观看 | 欧美色阁 | 高清国产精品久久久久 | 国产高清免费午夜在线视频 | 蜜桃影像传媒破解版 | 视频一区精品 | 91大片淫黄大片在线天堂 | 亚洲一区二区三区福利在线 | 国产成人精品1024在线 | 国产成人精品免费视频软件 | 国产精品igao视频网网址 | 国产3344视频在线观看免费 | 日本www色视频成人免费 | 国产成人精品日本亚洲网址 | 艾秋麻豆果冻剧传媒在线播放 | 午夜办公室 | 果冻传媒在线播放观看228集 | 亚洲乱码尤物193yw在线播放 | 3d蒂法受辱在线播放 | 黑人biglackon10十 | 男人摸女人下面 | 日本人添下面的全过程 | 精品国产自在现线拍400部 | 欧美一区二区三区在线观看不卡 | 亚洲国产婷婷俺也色综合 | 天堂8在线天堂资源bt | 国产成人精品视频一区二区不卡 | 92国产福利视频一区二区 | 久久这里都是精品 | 国产成人免费观看在线视频 | 99人中文字幕亚洲区 |