最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot 如何使用RestTemplate來調用接口

 更新時間:2021年10月23日 11:08:46   作者:奚學長又裝死  
這篇文章主要介紹了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
 */
@Configuration
public 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.多種傳輸和接收參數的方式

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>

在實現類中注入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字符串解析成對象即可。

postForEntity

和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}&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);
    }
 

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

相關文章

  • Java 堆排序實例(大頂堆、小頂堆)

    Java 堆排序實例(大頂堆、小頂堆)

    下面小編就為大家分享一篇Java 堆排序實例(大頂堆、小頂堆),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java動態(tài)代理模式的深入揭秘

    Java動態(tài)代理模式的深入揭秘

    這篇文章主要給大家介紹了關于Java動態(tài)代理模式的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • java中的Io(input與output)操作總結(三)

    java中的Io(input與output)操作總結(三)

    這一節(jié)我們來講Scanner類和PrintWriter類的用法,感興趣的朋友可以了解下
    2013-01-01
  • SpringCloud中的斷路器(Hystrix)和斷路器監(jiān)控(Dashboard)

    SpringCloud中的斷路器(Hystrix)和斷路器監(jiān)控(Dashboard)

    本篇主要介紹的是SpringCloud中的斷路器(Hystrix)和斷路器指標看板(Dashboard)的相關使用知識,需要的朋友可以參考下
    2019-06-06
  • Java日常練習題,每天進步一點點(60)

    Java日常練習題,每天進步一點點(60)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • Spring中的@Configuration詳解

    Spring中的@Configuration詳解

    這篇文章主要介紹了Spring中的@Configuration詳解,Spring 提供了豐富的特性和功能,包括依賴注入、面向切面編程、事務管理、數據訪問、Web應用程序開發(fā)等,需要的朋友可以參考下
    2023-08-08
  • SpringBoot整合Drools規(guī)則引擎動態(tài)生成業(yè)務規(guī)則的實現

    SpringBoot整合Drools規(guī)則引擎動態(tài)生成業(yè)務規(guī)則的實現

    本文主要介紹了SpringBoot整合Drools規(guī)則引擎動態(tài)生成業(yè)務規(guī)則的實現,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳解Maven settings.xml配置(指定本地倉庫、阿里云鏡像設置)

    詳解Maven settings.xml配置(指定本地倉庫、阿里云鏡像設置)

    這篇文章主要介紹了詳解Maven settings.xml配置(指定本地倉庫、阿里云鏡像設置),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 使Java的JButton文字隱藏功能的實現(不隱藏按鈕的前提)

    使Java的JButton文字隱藏功能的實現(不隱藏按鈕的前提)

    這篇文章主要介紹了使Java的JButton文字隱藏功能的實現(不隱藏按鈕的前提),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • spring boot 實現Minio分片上傳的步驟

    spring boot 實現Minio分片上傳的步驟

    分片上傳,就是將所要上傳的文件,按照一定的大小,將整個文件分隔成多個數據塊來進行分別上傳,上傳完之后再由服務端對所有上傳的文件進行匯總整合成原始的文件,本文給大家介紹spring boot 實現Minio分片上傳的步驟,感興趣的朋友跟隨小編一起看看吧
    2023-10-10

最新評論

永年县| 洞头县| 崇信县| 新沂市| 山阴县| 祁阳县| 灵川县| 都安| 腾冲县| 灵宝市| 湟源县| 清远市| 麟游县| 邯郸市| 金华市| 宁德市| 寻乌县| 博兴县| 泸溪县| 红安县| 木里| 抚顺市| 廉江市| 咸阳市| 隆化县| 沙洋县| 土默特右旗| 天峻县| 高安市| 安阳市| 绥阳县| 加查县| 固原市| 宽甸| 庐江县| 汝南县| 弥勒县| 类乌齐县| 黎川县| 桓仁| 扎鲁特旗|