亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot 如何使用RestTemplate來(lái)調(diào)用接口

 更新時(shí)間:2021年10月23日 11:08:46   作者:奚學(xué)長(zhǎng)又裝死  
這篇文章主要介紹了SpringBoot 如何使用RestTemplate來(lái)調(diào)用接口方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用RestTemplate來(lái)調(diào)用接口

1.新建一個(gè)配置類,配置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;
    } 
}

注意點(diǎn):如果在編譯器中提示factory不能自動(dòng)注入,那應(yīng)該時(shí)跟其他類有沖突,有多個(gè) ClientHttpRequestFactory

把這個(gè)factory的名字改一下,改成其他的就好了,比如這里就直接改成 simpleClientHttpRequestFactory

2.多種傳輸和接收參數(shù)的方式

2.1postForObject方法

postForObject指post請(qǐng)求,并返回一個(gè)Object對(duì)象。

  • 第1個(gè)參數(shù):請(qǐng)求的url地址
  • 第2個(gè)參數(shù):其實(shí)是HttpEntity,這個(gè)類主要有三種構(gòu)造方法,如下

new HttpEntity(請(qǐng)求體)

new HttpEntity(請(qǐng)求頭)

new HttpEntity(請(qǐng)求體,請(qǐng)求頭)

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

2.1.1使用Json來(lái)傳遞和接收數(shù)據(jù)

首先引入fastJson的pom配置

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.49</version>
		</dependency>

在實(shí)現(xiàn)類中注入RestTemplate

接下來(lái)new一個(gè) ExpressionDomain 對(duì)象,將這個(gè)對(duì)象轉(zhuǎn)化成JSONObject。使用Json來(lái)傳遞數(shù)據(jù)

public void postByDefault()
{
    ExpressionDomain expressionDomain=new ExpressionDomain("hello","hasaki","win");
    JSONObject jsonObj = (JSONObject) JSONObject.toJSON(expressionDomain);
    
    //設(shè)置請(qǐng)求頭
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
    headers.add("Accept", MediaType.APPLICATION_JSON.toString());
 
    //請(qǐng)求體
    HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
    
    //發(fā)起請(qǐng)求
    String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class);
    
    //將Json字符串解析成對(duì)象
    Response resp = JSON.parseObject(jsonResult, new TypeReference<Response>() {});
}

接收端

@RequestBody注解一個(gè)參數(shù),用于自動(dòng)解析Json為對(duì)象。返回的Response也是一個(gè)對(duì)象,添加@ResponseBody注解,將返回Json字符串。解析的時(shí)候?qū)son字符串解析成對(duì)象即可。

postForEntity

和getForEntity原理是一樣的,下面會(huì)講到。

2.2getForObject方法

getForObject指get請(qǐng)求,并返回一個(gè)Object對(duì)象。這里有3種方法。

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

2.2.1 通過(guò)Map傳參數(shù)的方式

可以使用map來(lái)封裝請(qǐng)求參數(shù),并作為getForObject的第三個(gè)參數(shù),同時(shí)修改url如下,map中的"1"會(huì)替換url中的{1},"2"會(huì)替換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 通過(guò)可變參數(shù)的方式

也可以直接將要傳遞的值放到getForObject方法的參數(shù)結(jié)尾,數(shù)量不限,它會(huì)按順序替換{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的用法是一樣的,只是其返回結(jié)果是一個(gè)ResponseEntity,其中包含了更多的響應(yīng)信息,比如:

		ResponseEntity response = restTemplate.getForEntity("http://localhost:8081/getIds",String.class);
		response.getHeaders();		//響應(yīng)頭
		response.getStatusCode();	//響應(yīng)碼
		response.getBody();			//響應(yīng)體,即前面的result

RestTemplate調(diào)用接口總結(jié)

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調(diào)用

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java基礎(chǔ)入門語(yǔ)法--String類

    Java基礎(chǔ)入門語(yǔ)法--String類

    字符串廣泛應(yīng)用在Java編程中,在Java中字符串屬于對(duì)象,Java 提供了String類來(lái)創(chuàng)建和操作字符串,今天給大家介紹Java基礎(chǔ)入門語(yǔ)法--String類的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-06-06
  • Java基于遞歸解決全排列問(wèn)題算法示例

    Java基于遞歸解決全排列問(wèn)題算法示例

    這篇文章主要介紹了Java基于遞歸解決全排列問(wèn)題算法,結(jié)合實(shí)例形式分析了Java使用遞歸算法解決全排列問(wèn)題的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • java 中序列化與readResolve()方法的實(shí)例詳解

    java 中序列化與readResolve()方法的實(shí)例詳解

    這篇文章主要介紹了java 中序列化與readResolve()方法的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家理解這部分知識(shí),需要的朋友可以參考下
    2017-08-08
  • 基于java中泛型的總結(jié)分析

    基于java中泛型的總結(jié)分析

    本篇文章介紹了,在java中泛型的總結(jié)分析。需要的朋友參考下
    2013-05-05
  • SpringBoot Security密碼加鹽實(shí)例

    SpringBoot Security密碼加鹽實(shí)例

    這篇文章主要為打擊介紹了SpringBoot Security密碼加鹽實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java Class.getSimpleName() 詳解及用法

    java Class.getSimpleName() 詳解及用法

    這篇文章主要介紹了java Class.getSimpleName() 詳解及用法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • SpringBoot Security安裝配置及Thymeleaf整合

    SpringBoot Security安裝配置及Thymeleaf整合

    這篇文章主要介紹了SpringBoot Security安裝配置及Thymeleaf整合,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java 基礎(chǔ)全面講解StringBuffer類的使用

    Java 基礎(chǔ)全面講解StringBuffer類的使用

    當(dāng)對(duì)字符串進(jìn)行修改的時(shí)候,需要使用 StringBuffer 和 StringBuilder類,和String類不同的是,StringBuffer和 StringBuilder類的對(duì)象能夠被多次的修改,并且不產(chǎn)生新的未使用對(duì)象
    2022-01-01
  • Java并發(fā)教程之Callable和Future接口詳解

    Java并發(fā)教程之Callable和Future接口詳解

    Java從發(fā)布的第一個(gè)版本開(kāi)始就可以很方便地編寫多線程的應(yīng)用程序,并在設(shè)計(jì)中引入異步處理,這篇文章主要給大家介紹了關(guān)于Java并發(fā)教程之Callable和Future接口的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Spring?RestTemplate遠(yuǎn)程調(diào)用過(guò)程

    Spring?RestTemplate遠(yuǎn)程調(diào)用過(guò)程

    這篇文章主要介紹了Spring?RestTemplate遠(yuǎn)程調(diào)用過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論