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

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

 更新時(shí)間:2022年11月18日 08:58:39   作者:盛世如戀  
這篇文章主要介紹了Spring?RestTemplate遠(yuǎn)程調(diào)用過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring RestTemplate遠(yuǎn)程調(diào)用 

之前在一個(gè)服務(wù)中調(diào)用另一個(gè)服務(wù)的請(qǐng)求,可以使用UrlConnection類來(lái)拼接Http請(qǐng)求頭,這個(gè)時(shí)候就會(huì)發(fā)現(xiàn),很麻煩,使用SpringRestTemplate的話 進(jìn)一步封裝了拼接的代碼,相對(duì)于來(lái)說(shuō)較為便捷。

Spring RestTemplate封裝了http請(qǐng)求,可以較為方便的在一個(gè)服務(wù)中調(diào)用另一個(gè)服務(wù)的請(qǐng)求。
 

說(shuō)明: 下面的例子是 使用端口為 8075的服務(wù) ,通過get/id來(lái)遠(yuǎn)程調(diào)用端口8086的服務(wù)的請(qǐng)求。

1、pom.xml加入

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

2、調(diào)用服務(wù)中的SpringBoot啟動(dòng)類注入RestTemplate

 @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

3、在需要使用的Controller類中自動(dòng)導(dǎo)入RestTemplate

 	@Autowired
    RestTemplate restTemplate;

4、根據(jù)調(diào)用某服務(wù)的ip拼接 url

調(diào)用RestTemplate的api獲取響應(yīng)內(nèi)容

    @RequestMapping("get/{id}")
    public User getById(@PathVariable("id") Integer id ){
        String url = "http://localhost:8086/get/"+id;
        User s = restTemplate.getForObject(url,User.class);
        return s;
    }

5、測(cè)試

調(diào)用成功

5、出現(xiàn)的問題和解決

如果使用RestTemplate的話,雖然為我們封裝了http請(qǐng)求頭等信息,但是url需要自己寫,不夠靈活。

1、如果調(diào)用的服務(wù)是一個(gè)集群呢,固定了ip地址是否不妥,解決方案是使用ribbon,保證多個(gè)服務(wù)集群用的服務(wù)名是一致的,拼接的url 的ip地址用服務(wù)名來(lái)拼接,這個(gè)時(shí)候就可以用一個(gè)url訪問多個(gè)端口號(hào)不一樣的相同服務(wù)了,ribbon會(huì)將服務(wù)名轉(zhuǎn)換成可以用的端口號(hào)。但是調(diào)用的服務(wù)有多個(gè),如何來(lái)選擇一個(gè)服務(wù)請(qǐng)求呢?這個(gè)時(shí)候就需要一個(gè)負(fù)載均衡算法,常用的負(fù)載均衡的算法有 輪詢等。 

2、用于拼接的http還是感覺不夠簡(jiǎn)便,還需要自己去拼接,可不可以更加靈活?可以使用feign來(lái)代替RestTemplate,feign是一個(gè)聲明式的遠(yuǎn)程調(diào)用,集成了ribbon和hystrix。

RestTemplate遠(yuǎn)程調(diào)用時(shí)遇到的問題

最近公司給了個(gè)任務(wù),讓我跟第三方接口聯(lián)調(diào),正好項(xiàng)目使用的是SpringBoot那我自然而然想到了SpringMVC提供的RestTemplate 來(lái)進(jìn)行遠(yuǎn)程調(diào)用,但是在使用RestTemplate遠(yuǎn)程調(diào)用時(shí)出現(xiàn)了點(diǎn)問題…

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

1.引入代碼

代碼如下(示例):

  ResponseEntity<String> responseEntity = restTemplate.postForEntity(activityParameterConfig.getPakageProvide() + "?sign=" + sign, jsonValue, String.class);
  String body = responseEntity.getBody();
  System.out.println("body = " + body);

在將結(jié)果轉(zhuǎn)化為String時(shí)成功獲取到了結(jié)果:

body = {"status":100,"msg":"發(fā)送成功","info":{"telphonenum":"*******1272","list":[{"ticketnum":"94330075353","start_use_date":"2021-03-09","end_use_date":"2031-03-09"}],"serial":"fa6b0592741a4d838c6a4737323c0c34","serial_number":"202103091614452220"}}

但是直接轉(zhuǎn)換為String還要再將其轉(zhuǎn)換為DTO,所以索性就選擇直接選擇在RestTemplate封裝結(jié)果時(shí)直接裝換為對(duì)應(yīng)DTO

2.引入代碼

代碼如下(示例):

   ResponseEntity<GiftDistributeResDTO> entity = restTemplate.postForEntity(activityParameterConfig.getPakageProvide() + "?sign=" + sign, jsonValue, GiftDistributeResDTO.class);
   GiftDistributeResDTO distributeResDTO = entity.getBody();
   System.out.println("distributeResDTO = " + distributeResDTO);

結(jié)果報(bào)錯(cuò)了…提示沒有對(duì)應(yīng)的HttpMessageConverter處理類型為Content Type [text/html;charset=utf-8]] 的數(shù)據(jù)。

2021-03-09 16:14:47.221 ERROR 13548 --- [nio-8082-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.example.demo.user.dto.GiftDistributeResDTO] and content type [text/html;charset=utf-8]] with root cause
org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.example.demo.user.dto.GiftDistributeResDTO] and content type [text/html;charset=utf-8]

小結(jié)

于是Debug了下發(fā)現(xiàn)RestTemplate中存在7種轉(zhuǎn)換器:


其中將結(jié)果轉(zhuǎn)換為我們要的DTO的是MappingJackson2HttpMessageConverter這個(gè)轉(zhuǎn)換器,再進(jìn)去看看這個(gè)轉(zhuǎn)換器屬性:


結(jié)果發(fā)現(xiàn)這個(gè)轉(zhuǎn)換器所支持的MediaTypes不存在上述text/html這種類型,所以才會(huì)報(bào)錯(cuò),既然找到了問題那就在創(chuàng)建RestTemplate時(shí)給它多加一些支持的類型:

    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
        for (HttpMessageConverter<?> httpMessageConverter : converters) {
            if(httpMessageConverter instanceof MappingJackson2HttpMessageConverter){
                ArrayList<MediaType> mediaTypes = new ArrayList<>();
                mediaTypes.add(MediaType.ALL);
                ((MappingJackson2HttpMessageConverter) httpMessageConverter).setSupportedMediaTypes(mediaTypes);
            }
        }
        return restTemplate;
    }

再次調(diào)試發(fā)現(xiàn)結(jié)果已經(jīng)可以正常封裝到我們需要的DTO了:

distributeResDTO = GiftDistributeResDTO(status=100, msg=發(fā)送禮包成功!, info=GiftDistributeInfo(telphonenum=*******1272, serial_number=202103091641391875, serial=27c66dbdce6a476481e895b852d82fd3, list=[GiftDistributeList(ticketnum=94330070661, start_use_date=2021-03-09, end_use_date=2031-03-09)]), url=null)

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

相關(guān)文章

  • 在Java編程中定義方法

    在Java編程中定義方法

    這篇文章主要介紹了在Java編程中定義方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Spring Batch 入門示例

    Spring Batch 入門示例

    本文將向您展示如何使用Spring Boot創(chuàng)建一個(gè)的Spring Batch的Hello World示例。對(duì)和我一樣入門的有一定的幫助,感興趣的小伙伴們可以參考一下
    2021-06-06
  • JavaFX Metro UI 和 開發(fā)庫(kù)使用簡(jiǎn)介

    JavaFX Metro UI 和 開發(fā)庫(kù)使用簡(jiǎn)介

    這篇文章主要介紹了JavaFX Metro UI 和 開發(fā)庫(kù)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Spring Boot使用yml格式進(jìn)行配置的方法

    Spring Boot使用yml格式進(jìn)行配置的方法

    很多springboot項(xiàng)目使用的是yml格式,主要目的是方便對(duì)讀懂其他人的項(xiàng)目,下面小編通過本文給大家分享Spring Boot使用yml格式進(jìn)行配置的方法,需要的朋友參考下吧
    2018-04-04
  • java web項(xiàng)目里ehcache.xml介紹

    java web項(xiàng)目里ehcache.xml介紹

    java web項(xiàng)目里ehcache.xml介紹,需要的朋友可以參考一下
    2013-03-03
  • Eclipse+Java+Swing+Mysql實(shí)現(xiàn)電影購(gòu)票系統(tǒng)(詳細(xì)代碼)

    Eclipse+Java+Swing+Mysql實(shí)現(xiàn)電影購(gòu)票系統(tǒng)(詳細(xì)代碼)

    這篇文章主要介紹了Eclipse+Java+Swing+Mysql實(shí)現(xiàn)電影購(gòu)票系統(tǒng)并附詳細(xì)的代碼詳解,需要的小伙伴可以參考一下
    2022-01-01
  • Springboot如何設(shè)置靜態(tài)資源緩存一年

    Springboot如何設(shè)置靜態(tài)資源緩存一年

    這篇文章主要介紹了Springboot如何設(shè)置靜態(tài)資源緩存一年,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • JavaMail實(shí)現(xiàn)發(fā)送郵件功能

    JavaMail實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了JavaMail實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Java復(fù)習(xí)之集合框架總結(jié)

    Java復(fù)習(xí)之集合框架總結(jié)

    本篇文章主要介紹了Java復(fù)習(xí)之集合框架總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-09-09
  • Java創(chuàng)建線程池的幾種方式代碼示例

    Java創(chuàng)建線程池的幾種方式代碼示例

    這篇文章主要介紹了Java中創(chuàng)建線程池的四種方式,包括使用Executors類、ThreadPoolExecutor類、Future和Callable接口以及Spring的ThreadPoolTaskExecutor,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01

最新評(píng)論

冕宁县| 潢川县| 卢湾区| 米林县| 巨鹿县| 平阴县| 丰都县| 波密县| 泰顺县| 威远县| 肃北| 大新县| 万年县| 扶余县| 红原县| 泸溪县| 马鞍山市| 永寿县| 霍州市| 乐至县| 大余县| 炉霍县| 芒康县| 巧家县| 镇雄县| 比如县| 谷城县| 五指山市| 开江县| 临夏市| 高雄县| 三河市| 陇南市| 周口市| 育儿| 邻水| 蓬安县| 昆明市| 海南省| 买车| 山丹县|