" />

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

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

 更新時間:2022年11月15日 16:45:33   作者:smileNicky  
RestTemplate 是從 Spring3.0 開始支持的一個 HTTP 請求工具,也有的稱之為網(wǎng)絡(luò)框架,說白了就是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,或者轉(zhuǎn)為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 構(gòu)建請求的鏈接,也是拼參數(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的工具類,轉(zhuǎn)換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的工具類進行轉(zhuǎn)換,import org.apache.commons.beanutils.BeanUtilsBean;

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

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

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

相關(guān)文章

  • 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處理分布式事務(wù)的技巧

    SpringCloud Alibaba使用Seata處理分布式事務(wù)的技巧

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

    Java獲取當(dāng)前時間并轉(zhuǎn)化為yyyy-MM-dd?HH:mm:ss格式的多種方式

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

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

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

    閑言碎語-逐步了解Spring

    這篇文章主要介紹了閑言碎語-逐步了解Spring,涉及Spring的誕生,簡介,作用等相關(guān)內(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),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01

最新評論

荆门市| 余江县| 通化市| 陕西省| 桑植县| 磐石市| 阿坝| 尼玛县| 景东| 宣武区| 右玉县| 阜城县| 章丘市| 堆龙德庆县| 壶关县| 贵港市| 当雄县| 磴口县| 施秉县| 治多县| 沛县| 山西省| 常州市| 河东区| 民乐县| 固安县| 门头沟区| 铁岭市| 行唐县| 阳高县| 绍兴县| 涪陵区| 康保县| 大城县| 长宁县| 新民市| 南安市| 共和县| 武汉市| 武定县| 凌云县|