国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot 調(diào)用外部接口的 3 種方式,還有誰(shuí)不會(huì)?!

這篇具有很好參考價(jià)值的文章主要介紹了Spring Boot 調(diào)用外部接口的 3 種方式,還有誰(shuí)不會(huì)?!。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、簡(jiǎn)介

SpringBoot不僅繼承了Spring框架原有的優(yōu)秀特性,而且還通過(guò)簡(jiǎn)化配置來(lái)進(jìn)一步簡(jiǎn)化了Spring應(yīng)用的整個(gè)搭建和開發(fā)過(guò)程。

在Spring-Boot項(xiàng)目開發(fā)中,存在著本模塊的代碼需要訪問外面模塊接口,或外部url鏈接的需求, 比如在apaas開發(fā)過(guò)程中需要封裝接口在接口中調(diào)用apaas提供的接口(像發(fā)起流程接口submit等等)下面也是提供了三種方式(不使用dubbo的方式)供我們選擇

推薦一個(gè)開源免費(fèi)的 Spring Boot 實(shí)戰(zhàn)項(xiàng)目:

https://github.com/javastacks/spring-boot-best-practice

2、方式一:使用原始httpClient請(qǐng)求

/*
 * @description get方式獲取入?yún)ⅲ迦霐?shù)據(jù)并發(fā)起流程
 * @author lyx
 * @date 2022/8/24 16:05
 * @params documentId
 * @return String
 */
//
@RequestMapping("/submit/{documentId}")
public String submit1(@PathVariable String documentId) throws ParseException {
    //此處將要發(fā)送的數(shù)據(jù)轉(zhuǎn)換為json格式字符串
    Map<String,Object> map =task2Service.getMap(documentId);
    String jsonStr = JSON.toJSONString(map, SerializerFeature.WRITE_MAP_NULL_FEATURES,SerializerFeature.QuoteFieldNames);
    JSONObject jsonObject = JSON.parseObject(jsonStr);
    JSONObject sr = task2Service.doPost(jsonObject);
    return sr.toString();
}
/*
 * @description 使用原生httpClient調(diào)用外部接口
 * @author lyx
 * @date 2022/8/24 16:08
 * @params date
 * @return JSONObject
 */
public static JSONObject doPost(JSONObject date) {
    String assessToken="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ4ZGFwYXBwaWQiOiIzNDgxMjU4ODk2OTI2OTY1NzYiLCJleHAiOjE2NjEyMjY5MDgsImlhdCI6MTY2MTIxOTcwOCwieGRhcHRlbmFudGlkIjoiMzAwOTgxNjA1MTE0MDUyNjA5IiwieGRhcHVzZXJpZCI6IjEwMDM0NzY2MzU4MzM1OTc5NTIwMCJ9.fZAO4kJSv2rSH0RBiL1zghdko8Npmu_9ufo6Wex_TI2q9gsiLp7XaW7U9Cu7uewEOaX4DTdpbFmMPvLUtcj_sQ";
    CloseableHttpClient client = HttpClients.createDefault();
    // 要調(diào)用的接口url
    String url = "http://39.103.201.110:30661 /xdap-open/open/process/v1/submit";
    HttpPost post = new HttpPost(url);
    JSONObject jsonObject = null;
    try {
        //創(chuàng)建請(qǐng)求體并添加數(shù)據(jù)
        StringEntity s = new StringEntity(date.toString());
        //此處相當(dāng)于在header里頭添加content-type等參數(shù)
        s.setContentType("application/json");
        s.setContentEncoding("UTF-8");
        post.setEntity(s);
        //此處相當(dāng)于在Authorization里頭添加Bear token參數(shù)信息
        post.addHeader("Authorization", "Bearer " +assessToken);
        HttpResponse res = client.execute(post);
        String response1 = EntityUtils.toString(res.getEntity());
        if (res.getStatusLine()
                .getStatusCode() == HttpStatus.SC_OK) {
            // 返回json格式:
            String result = EntityUtils.toString(res.getEntity());
            jsonObject = JSONObject.parseObject(result);
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return jsonObject;
}

3、方式二:使用RestTemplate方法

Spring-Boot開發(fā)中,RestTemplate同樣提供了對(duì)外訪問的接口API,這里主要介紹Get和Post方法的使用。

Get請(qǐng)求

提供了getForObjectgetForEntity兩種方式,其中getForEntity如下三種方法的實(shí)現(xiàn):

Get--getForEntity,存在以下兩種方式重載

1.getForEntity(Stringurl,Class responseType,Object…urlVariables)
2.getForEntity(URI url,Class responseType)

Get--getForEntity(URI url,Class responseType)

//該方法使用URI對(duì)象來(lái)替代之前的url和urlVariables參數(shù)來(lái)指定訪問地址和參數(shù)綁定。URI是JDK java.net包下的一個(gè)類,表示一個(gè)統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifier)引用。參考如下:
RestTemplate restTemplate=new RestTemplate();
UriComponents 
uriComponents=UriComponentsBuilder.fromUriString("http://USER-SERVICE/user?name={name}")
.build()
.expand("dodo")
.encode();
URI uri=uriComponents.toUri();
ResponseEntityresponseEntity=restTemplate.getForEntity(uri,String.class).getBody();

Get--getForEntity(Stringurl,Class responseType,Object…urlVariables)

//該方法提供了三個(gè)參數(shù),其中url為請(qǐng)求的地址,responseType為請(qǐng)求響應(yīng)body的包裝類型,urlVariables為url中的參數(shù)綁定,該方法的參考調(diào)用如下:
// http://USER-SERVICE/user?name={name)
RestTemplate restTemplate=new RestTemplate();
Mapparams=new HashMap<>();
params.put("name","dada"); //
ResponseEntityresponseEntity=restTemplate.getForEntity("http://USERSERVICE/user?name={name}",String.class,params);

Get--getForObject,存在以下三種方式重載

1.getForObject(String url,Class responseType,Object...urlVariables)
2.getForObject(String url,Class responseType,Map urlVariables)
3.getForObject(URI url,Class responseType)

getForObject方法可以理解為對(duì)getForEntity的進(jìn)一步封裝,它通過(guò)HttpMessageConverterExtractor對(duì)HTTP的請(qǐng)求響應(yīng)體body內(nèi)容進(jìn)行對(duì)象轉(zhuǎn)換,實(shí)現(xiàn)請(qǐng)求直接返回包裝好的對(duì)象內(nèi)容。

Post 請(qǐng)求

Post請(qǐng)求提供有postForEntity、postForObjectpostForLocation三種方式,其中每種方式都有三種方法,下面介紹postForEntity的使用方法。

Post--postForEntity,存在以下三種方式重載

1.postForEntity(String url,Object request,Class responseType,Object...  uriVariables) 
2.postForEntity(String url,Object request,Class responseType,Map  uriVariables) 
3.postForEntity(URI url,Object request,Class responseType)

如下僅演示第二種重載方式

/*
 * @description post方式獲取入?yún)?,插入?shù)據(jù)并發(fā)起流程
 * @author lyx
 * @date 2022/8/24 16:07
 * @params
 * @return
 */
@PostMapping("/submit2")
public Object insertFinanceCompensation(@RequestBody JSONObject jsonObject) {
    String documentId=jsonObject.get("documentId").toString();
    return task2Service.submit(documentId);
}
/*
 * @description 使用restTimeplate調(diào)外部接口
 * @author lyx
 * @date 2022/8/24 16:02
 * @params documentId
 * @return String
 */
public String submit(String documentId){
    String assessToken="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ4ZGFwYXBwaWQiOiIzNDgxMjU4ODk2OTI2OTY1NzYiLCJleHAiOjE2NjEyMjY5MDgsImlhdCI6MTY2MTIxOTcwOCwieGRhcHRlbmFudGlkIjoiMzAwOTgxNjA1MTE0MDUyNjA5IiwieGRhcHVzZXJpZCI6IjEwMDM0NzY2MzU4MzM1OTc5NTIwMCJ9.fZAO4kJSv2rSH0RBiL1zghdko8Npmu_9ufo6Wex_TI2q9gsiLp7XaW7U9Cu7uewEOaX4DTdpbFmMPvLUtcj_sQ";
    RestTemplate restTemplate = new RestTemplate();
    //創(chuàng)建請(qǐng)求頭
    HttpHeaders httpHeaders = new HttpHeaders();
    //此處相當(dāng)于在Authorization里頭添加Bear token參數(shù)信息
    httpHeaders.add(HttpHeaders.AUTHORIZATION, "Bearer " + assessToken);
    //此處相當(dāng)于在header里頭添加content-type等參數(shù)
    httpHeaders.add(HttpHeaders.CONTENT_TYPE,"application/json");
    Map<String, Object> map = getMap(documentId);
    String jsonStr = JSON.toJSONString(map);
    //創(chuàng)建請(qǐng)求體并添加數(shù)據(jù)
    HttpEntity<Map> httpEntity = new HttpEntity<Map>(map, httpHeaders);
    String url = "http://39.103.201.110:30661/xdap-open/open/process/v1/submit";
    ResponseEntity<String> forEntity = restTemplate.postForEntity(url,httpEntity,String.class);//此處三個(gè)參數(shù)分別是請(qǐng)求地址、請(qǐng)求體以及返回參數(shù)類型
    return forEntity.toString();
}

4、方式三:使用Feign進(jìn)行消費(fèi)

在maven項(xiàng)目中添加依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
    <version>1.2.2.RELEASE</version>
</dependency>

啟動(dòng)類上加上@EnableFeignClients

@SpringBootApplication
@EnableFeignClients
@ComponentScan(basePackages = {"com.definesys.mpaas", "com.xdap.*" ,"com.xdap.*"})
public class MobilecardApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(MobilecardApplication.class, args);
    }
 
}

此處編寫接口模擬外部接口供feign調(diào)用外部接口方式使用

定義controller

@Autowired
PrintService printService;

@PostMapping("/outSide")
public String test(@RequestBody TestDto testDto) {
    return printService.print(testDto);
}

定義service

@Service
public interface PrintService {
    public String print(TestDto testDto);
}

定義serviceImpl

public class PrintServiceImpl implements PrintService {
 
    @Override
    public String print(TestDto testDto) {
        return "模擬外部系統(tǒng)的接口功能"+testDto.getId();
    }
}

構(gòu)建Feigin的Service

定義service

//此處name需要設(shè)置不為空,url需要在.properties中設(shè)置
@Service
@FeignClient(url = "${outSide.url}", name = "service2")
public interface FeignService2 {
    @RequestMapping(value = "/custom/outSide", method = RequestMethod.POST)
    @ResponseBody
    public String getMessage(@Valid @RequestBody TestDto testDto);
}

定義controller

@Autowired
FeignService2 feignService2;
//測(cè)試feign調(diào)用外部接口入口
@PostMapping("/test2")
public String test2(@RequestBody TestDto testDto) {
    return feignService2.getMessage(testDto);
}

postman測(cè)試

Spring Boot 調(diào)用外部接口的 3 種方式,還有誰(shuí)不會(huì)?!

此處因?yàn)槲沂褂昧怂陧?xiàng)目,所以需要添加一定的請(qǐng)求頭等信息,關(guān)于Feign的請(qǐng)求頭添加也會(huì)在后續(xù)補(bǔ)充

補(bǔ)充如下:

添加Header解決方法

將token等信息放入Feign請(qǐng)求頭中,主要通過(guò)重寫RequestInterceptor的apply方法實(shí)現(xiàn)

定義config

@Configuration
public class FeignConfig implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        //添加token
        requestTemplate.header("token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ4ZGFwYXBwaWQiOiIzNDgxMjU4ODk2OTI2OTY1NzYiLCJleHAiOjE2NjEyMjY5MDgsImlhdCI6MTY2MTIxOTcwOCwieGRhcHRlbmFudGlkIjoiMzAwOTgxNjA1MTE0MDUyNjA5IiwieGRhcHVzZXJpZCI6IjEwMDM0NzY2MzU4MzM1OTc5NTIwMCJ9.fZAO4kJSv2rSH0RBiL1zghdko8Npmu_9ufo6Wex_TI2q9gsiLp7XaW7U9Cu7uewEOaX4DTdpbFmMPvLUtcj_sQ");
    }
}

定義service

@Service
@FeignClient(url = "${outSide.url}",name = "feignServer", configuration = FeignDemoConfig.class)
public interface TokenDemoClient {
    @RequestMapping(value = "/custom/outSideAddToken", method = RequestMethod.POST)
    @ResponseBody
    public String getMessage(@Valid @RequestBody TestDto testDto);
}

定義controller

//測(cè)試feign調(diào)用外部接口入口,加上token
@PostMapping("/testToken")
public String test4(@RequestBody TestDto testDto) {
    return tokenDemoClient.getMessage(testDto);
}

版權(quán)聲明:本文為CSDN博主「Chelsea」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。原文鏈接:https://blog.csdn.net/Chelsea/article/details/126689495

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2022最新版)

2.勁爆!Java 協(xié)程要來(lái)了。。。

3.Spring Boot 2.x 教程,太全了!

4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優(yōu)雅的方式??!

5.《Java開發(fā)手冊(cè)(嵩山版)》最新發(fā)布,速速下載!

覺得不錯(cuò),別忘了隨手點(diǎn)贊+轉(zhuǎn)發(fā)哦!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-493900.html

到了這里,關(guān)于Spring Boot 調(diào)用外部接口的 3 種方式,還有誰(shuí)不會(huì)?!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【SpringBoot18】SpringBoot 調(diào)用外部接口的三種方式

    【SpringBoot18】SpringBoot 調(diào)用外部接口的三種方式

    SpringBoot不僅繼承了Spring框架原有的優(yōu)秀特性,而且還通過(guò)簡(jiǎn)化配置來(lái)進(jìn)一步簡(jiǎn)化了Spring應(yīng)用的整個(gè)搭建和開發(fā)過(guò)程。在Spring-Boot項(xiàng)目開發(fā)中,存在著本模塊的代碼需要訪問外面模塊接口,或外部url鏈接的需求, 比如在apaas開發(fā)過(guò)程中需要封裝接口在接口中調(diào)用apaas提供的接口(

    2023年04月11日
    瀏覽(35)
  • Spring Boot進(jìn)階(65):解鎖神技!讓Spring Boot與外部API打通的10種方式

    Spring Boot進(jìn)階(65):解鎖神技!讓Spring Boot與外部API打通的10種方式

    ????????在當(dāng)今互聯(lián)網(wǎng)時(shí)代,API已經(jīng)成為了軟件開發(fā)和數(shù)據(jù)交互的重要手段。有時(shí),我們需要調(diào)用外部API以訪問某些遠(yuǎn)程服務(wù)或獲取某些數(shù)據(jù)。然而,API的調(diào)用方式并不限于我們所熟知的GET和POST請(qǐng)求,還有其他一些不太為人所知的方式。 ????????本文將介紹10種你可能

    2024年02月09日
    瀏覽(27)
  • HttpServiceProxyFactory 在 Spring Boot 3 中的應(yīng)用:Spring Boot 3 使用 HttpServiceProxyFactory 調(diào)用遠(yuǎn)程接口

    HttpServiceProxyFactory 在 Spring Boot 3 中的應(yīng)用:Spring Boot 3 使用 HttpServiceProxyFactory 調(diào)用遠(yuǎn)程接口

    博主貓頭虎的技術(shù)世界 ?? 歡迎來(lái)到貓頭虎的博客 — 探索技術(shù)的無(wú)限可能! 專欄鏈接 : ?? 精選專欄 : 《面試題大全》 — 面試準(zhǔn)備的寶典! 《IDEA開發(fā)秘籍》 — 提升你的IDEA技能! 《100天精通Golang》 — Go語(yǔ)言學(xué)習(xí)之旅! 領(lǐng)域矩陣 : ?? 貓頭虎技術(shù)領(lǐng)域矩陣 : 深入探索

    2024年02月02日
    瀏覽(22)
  • spring boot請(qǐng)求http接口的三種方式

    HttpURLConnection 是 Java 中的 HTTP 客戶端實(shí)現(xiàn),,適用于簡(jiǎn)單的請(qǐng)求需要。 HttpURLConnection主要工作內(nèi)容:打開socket連接,封裝http請(qǐng)求報(bào)文,解析請(qǐng)求報(bào)文。 OkHttp 是一個(gè)第三方的 HTTP 客戶端庫(kù),它比 Java 標(biāo)準(zhǔn)的 HttpURLConnection 更高效、更實(shí)用。主要特點(diǎn)包括: 比 HttpURLConnection 快得多

    2024年02月14日
    瀏覽(28)
  • restTemplate調(diào)用外部接口,調(diào)用返回307,用postman直接調(diào)用接口正常返回?cái)?shù)據(jù)

    restTemplate調(diào)用外部接口,調(diào)用返回307,用postman直接調(diào)用接口正常返回?cái)?shù)據(jù)

    restTemplate調(diào)用外部接口,調(diào)用返回307,用postman直接調(diào)用接口正常返回?cái)?shù)據(jù) 結(jié)論:調(diào)用的接口路徑后加/ postman 關(guān)掉自動(dòng)重定向(filesettins把Automatically follow redirects關(guān)掉),調(diào)用也同樣返回307了 在網(wǎng)上各種搜307,出來(lái)的結(jié)果都是什么重定向 getHeaders().getLocation().toString() 獲得返回

    2024年02月03日
    瀏覽(64)
  • SpringBoot 調(diào)用外部接口

    SpringBoot 調(diào)用外部接口

    一個(gè)系統(tǒng)肯定少不了要和外部系統(tǒng)進(jìn)行通信,所以就必須得訪問外部接口。 本次演示的是使用的是 高德天氣api接口 使用插件方式,比如自帶的HttpClient,或者OkHttp,甚至是原生的HttpURLConnection 等等,這里以HttpClient為例。 1、封裝工具類 簡(jiǎn)單封裝的get請(qǐng)求 2、測(cè)試方法 3、結(jié)果

    2024年02月09日
    瀏覽(23)
  • mssql調(diào)用外部接口

    斷更很久了。 是因?yàn)檫@段時(shí)間發(fā)現(xiàn),AI出來(lái)之后,很多博客都沒有記錄的必要了,你問他他都能即時(shí)告訴你。 這篇博客產(chǎn)出的原因是,看到一份奇葩需求,說(shuō)數(shù)據(jù)庫(kù)改某行數(shù)據(jù)的狀態(tài)字段,也要調(diào)用接口。 我覺著挺奇葩的,就記錄一下吧。 數(shù)據(jù)庫(kù)觸發(fā)器內(nèi),調(diào)用外部接口

    2024年02月07日
    瀏覽(17)
  • C#調(diào)用外部接口(POST、GET)

    ? public? string? HttpPost( ) { //把用戶傳過(guò)來(lái)的數(shù)據(jù)轉(zhuǎn)成“UTF-8”的字節(jié)流 Encoding encoding = Encoding.UTF8; //創(chuàng)建一個(gè)HTTP請(qǐng)求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(\\\"http://接口IP地址:端口號(hào)/接口路徑\\\");? ? ?//比如:http://192.168.123.12:8080/api/post ? //調(diào)用POST方法 request.Method = \\\"PO

    2024年02月13日
    瀏覽(25)
  • 隱藏 IP 地址調(diào)用外部接口:探索與實(shí)踐

    引言: 在網(wǎng)絡(luò)開發(fā)中,有時(shí)我們需要調(diào)用外部接口來(lái)獲取數(shù)據(jù)或執(zhí)行某些操作。然而,有些情況下,我們希望隱藏自己的 IP 地址,以保護(hù)隱私或規(guī)避某些限制。本文將探討隱藏 IP 地址調(diào)用外部接口的方法和解決方案,以及在 Java 中實(shí)現(xiàn)的具體示例。 隱藏 IP 地址的方法: 使

    2024年03月16日
    瀏覽(17)
  • Python調(diào)用外部程序的9種方式,你都知道嗎?

    前言 ? ? 外部程序,測(cè)試工程師經(jīng)常使用adb,Python程序中調(diào)用adb,相對(duì)當(dāng)前的Python程序,則為調(diào)用外部程序,你可能用過(guò)os.system()、os.popen()等方式,官方推薦subprocess模塊中的run()函數(shù),根據(jù)你的喜好,那種方式都可以使用,先羅列一點(diǎn)前置知識(shí)點(diǎn),如果你還不知道這些術(shù)

    2023年04月25日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包