" />

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

RestTemplate Get請求實現(xiàn)bean參數(shù)傳遞詳解

 更新時間:2022年11月15日 16:45:33   作者:smileNicky  
RestTemplate 是從 Spring3.0 開始支持的一個 HTTP 請求工具,也有的稱之為網(wǎng)絡框架,說白了就是Java版本的一個postman,這篇文章主要介紹了詳解RestTemplate 用法,需要的朋友可以參考下

項目場景

Spring 的 RestTemplate 是一個健壯的、流行的基于 Java 的 Http客戶端。

RestTemplate實現(xiàn)request param參數(shù)傳送,如果如下所示,直接傳一個map對象,調(diào)試之后是不會接收到參數(shù)的

Map<String,Object> param = new HashMap<String,Object>();
param.put("since",10);
restTemplate.getForObject("https://api.github.com/users" , UserDto.class, param);

所以,正確的用法是使用占位符:

Map<String,Object> param = new HashMap<String,Object>();
param.put("since",10);
restTemplate.getForObject("https://api.github.com/users?since={since}" , UserDto.class, param);

問題描述

但是參數(shù)一多,我們每個都寫占位符,那不是很麻煩,直接丟一個javabean不可以?直接丟個javabean,或者轉為map參數(shù)都不能直接傳過來

原因分析

通過查看RestTemplate源碼:org.springframework.web.client.RestTemplate#initUriTemplateHandler

DefaultUriBuilderFactory是RestTemplateURL處理的工廠類,基層接口是UriTemplateHandler,所以可以重新定義一下UriTemplateHandler

解決方案

下面介紹一種方法,可以重寫UriTemplateHandler 接口,在RestTemplate源碼里找到這個接口是對接口參數(shù)進行處理的

package com.example.resttemplate.configuration;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.util.DefaultUriBuilderFactory;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.UriTemplateHandler;
import java.net.URI;
import java.util.Map;
@Slf4j
public class RestGetUriTemplateHandler implements UriTemplateHandler {
    private UriTemplateHandler uriTemplateHandler = new DefaultUriBuilderFactory();
    @Override
    public URI expand(String uriTemplate, Map<String, ?> uriVariables) {
    	// 使用UriComponentsBuilder 構建請求的鏈接,也是拼參數(shù)的方法
        UriComponentsBuilder builder = UriComponentsBuilder
                .fromHttpUrl(uriTemplate);
        for (Map.Entry<String, ?> entry : uriVariables.entrySet()) {
            builder.queryParam(entry.getKey(), entry.getValue());
        }
        String uriString = builder.toUriString();
        log.info("uriString:[{}]" , uriString);
        return uriTemplateHandler.expand(uriString , uriVariables);
    }
    @Override
    public URI expand(String uriTemplate, Object... uriVariables) {
        return uriTemplateHandler.expand(uriTemplate, uriVariables);
    }
}

使用Hutool的工具類,轉換bean類為map對象,import cn.hutool.core.bean.BeanUtil;

restTemplate.setUriTemplateHandler(new RestGetUriTemplateHandler());
Map<String,Object> param = BeanUtil.beanToMap(queryDto);
restTemplate.getForObject("https://api.github.com/users/mojombo", UserDto.class , param);

也可以借助apache-commont的工具類進行轉換,import org.apache.commons.beanutils.BeanUtilsBean;

Map<String, String> paramMap = BeanUtilsBean.getInstance().describe(bean);

運行之后,可以發(fā)現(xiàn)參數(shù)帶上去了,之后調(diào)第三方接口,直接傳個javabean就可以,方便很多,也可以對javabean轉map的操作進行封裝,之后直接調(diào)用

到此這篇關于RestTemplate Get請求實現(xiàn)bean參數(shù)傳遞詳解的文章就介紹到這了,更多相關RestTemplate參數(shù)傳遞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Cloud Feign簡單使用詳解

    Spring Cloud Feign簡單使用詳解

    本篇文章主要介紹了Spring Cloud Feign簡單使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • SystemServer進程啟動過程解析

    SystemServer進程啟動過程解析

    這篇文章主要為大家介紹了SystemServer進程啟動過程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java map.getOrDefault()方法的用法詳解

    Java map.getOrDefault()方法的用法詳解

    這篇文章主要介紹了Java map.getOrDefault()方法的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 自己動手在Spring-Boot上加強國際化功能的示例

    自己動手在Spring-Boot上加強國際化功能的示例

    這篇文章主要介紹了自己動手在Spring-Boot上加強國際化功能的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • SpringCloud Alibaba使用Seata處理分布式事務的技巧

    SpringCloud Alibaba使用Seata處理分布式事務的技巧

    在傳統(tǒng)的單體項目中,我們使用@Transactional注解就能實現(xiàn)基本的ACID事務了,隨著微服務架構的引入,需要對數(shù)據(jù)庫進行分庫分表,每個服務擁有自己的數(shù)據(jù)庫,這樣傳統(tǒng)的事務就不起作用了,那么我們?nèi)绾伪WC多個服務中數(shù)據(jù)的一致性呢?跟隨小編一起通過本文了解下吧
    2021-06-06
  • Java獲取當前時間并轉化為yyyy-MM-dd?HH:mm:ss格式的多種方式

    Java獲取當前時間并轉化為yyyy-MM-dd?HH:mm:ss格式的多種方式

    這篇文章主要介紹了Java獲取當前時間并轉化為yyyy-MM-dd?HH:mm:ss格式的多種方式,每種方式結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Java 數(shù)據(jù)類型及類型轉換的互相轉換實例代碼

    Java 數(shù)據(jù)類型及類型轉換的互相轉換實例代碼

    這篇文章主要介紹了Java 數(shù)據(jù)類型及類型轉換的互相轉換實例代碼,需要的朋友可以參考下
    2020-10-10
  • 閑言碎語-逐步了解Spring

    閑言碎語-逐步了解Spring

    這篇文章主要介紹了閑言碎語-逐步了解Spring,涉及Spring的誕生,簡介,作用等相關內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • springmvc如何使用map接收參數(shù)

    springmvc如何使用map接收參數(shù)

    這篇文章主要介紹了springmvc如何使用map接收參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • springboot validator枚舉值校驗功能實現(xiàn)

    springboot validator枚舉值校驗功能實現(xiàn)

    這篇文章主要介紹了springboot validator枚舉值校驗功能實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01

最新評論

卢氏县| 普兰县| 饶河县| 宜阳县| 会泽县| 定边县| 涿鹿县| 凌云县| 沙雅县| 蕉岭县| 宁远县| 长寿区| 罗平县| 苍南县| 玉树县| 克什克腾旗| 安康市| 明光市| 宁阳县| 浙江省| 玛曲县| 谷城县| 如皋市| 黔西| 彰武县| 东光县| 柳林县| 四会市| 西畴县| 电白县| 洪洞县| 关岭| 长汀县| 通许县| 太白县| 航空| 和龙市| 米林县| 福鼎市| 上栗县| 西城区|