" />

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

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

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

項(xiàng)目場(chǎng)景

Spring 的 RestTemplate 是一個(gè)健壯的、流行的基于 Java 的 Http客戶(hù)端。

RestTemplate實(shí)現(xiàn)request param參數(shù)傳送,如果如下所示,直接傳一個(gè)map對(duì)象,調(diào)試之后是不會(huì)接收到參數(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);

問(wèn)題描述

但是參數(shù)一多,我們每個(gè)都寫(xiě)占位符,那不是很麻煩,直接丟一個(gè)javabean不可以?直接丟個(gè)javabean,或者轉(zhuǎn)為map參數(shù)都不能直接傳過(guò)來(lái)

原因分析

通過(guò)查看RestTemplate源碼:org.springframework.web.client.RestTemplate#initUriTemplateHandler

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

解決方案

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

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)建請(qǐng)求的鏈接,也是拼參數(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的工具類(lèi),轉(zhuǎn)換bean類(lèi)為map對(duì)象,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的工具類(lèi)進(jìn)行轉(zhuǎn)換,import org.apache.commons.beanutils.BeanUtilsBean;

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

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

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

相關(guān)文章

  • Spring Boot與Kotlin處理Web表單提交的方法

    Spring Boot與Kotlin處理Web表單提交的方法

    本篇文章主要介紹了Spring Boot 與 Kotlin 處理Web表單提交的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 多線程如何解決for循環(huán)效率的問(wèn)題

    多線程如何解決for循環(huán)效率的問(wèn)題

    這篇文章主要介紹了多線程如何解決for循環(huán)效率的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • JDK14性能管理工具之jstack使用介紹

    JDK14性能管理工具之jstack使用介紹

    jstack工具主要用來(lái)打印java堆棧信息,主要是java的class名字,方法名,字節(jié)碼索引,行數(shù)等信息。這篇文章主要介紹了JDK14性能管理工具之jstack使用介紹,需要的朋友可以參考下
    2020-05-05
  • Shiro+Redis實(shí)現(xiàn)登錄次數(shù)凍結(jié)的示例

    Shiro+Redis實(shí)現(xiàn)登錄次數(shù)凍結(jié)的示例

    這篇文章主要介紹了Shiro+Redis實(shí)現(xiàn)登錄次數(shù)凍結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java并發(fā)之Lock接口的深入講解

    java并發(fā)之Lock接口的深入講解

    從Java 5之后,在java.util.concurrent.locks包下提供了另外一種方式來(lái)實(shí)現(xiàn)同步訪問(wèn).那就是Lock,這篇文章主要給大家介紹了關(guān)于java并發(fā)之Lock接口的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 深入解析SpringBatch適配器

    深入解析SpringBatch適配器

    Spring Batch是Spring的一個(gè)子項(xiàng)目,使用Java語(yǔ)言并基于Spring框架為基礎(chǔ)開(kāi)發(fā),使得已經(jīng)使用 Spring 框架的開(kāi)發(fā)者或者企業(yè)更容易訪問(wèn)和利用企業(yè)服務(wù),本文給大家介紹SpringBatch適配器的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-11-11
  • 解決Idea啟動(dòng)Spring Boot很慢的問(wèn)題

    解決Idea啟動(dòng)Spring Boot很慢的問(wèn)題

    這篇文章主要介紹了解決Idea啟動(dòng)Spring Boot很慢的問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-12-12
  • Spring創(chuàng)建Bean完成后執(zhí)行指定代碼的幾種實(shí)現(xiàn)方式

    Spring創(chuàng)建Bean完成后執(zhí)行指定代碼的幾種實(shí)現(xiàn)方式

    在實(shí)際開(kāi)發(fā)中經(jīng)常會(huì)遇到在spring容器加載完某個(gè)bean之后,需要執(zhí)行一些業(yè)務(wù)代碼的場(chǎng)景,本文給大家介紹Spring創(chuàng)建Bean完成后執(zhí)行指定代碼的幾種實(shí)現(xiàn)方式,感興趣的朋友一起看看吧
    2024-01-01
  • java堆棧跟蹤工具jstack的使用教程

    java堆棧跟蹤工具jstack的使用教程

    jstack(stack?trace?for?java)是java虛擬機(jī)自帶的一種堆棧跟蹤工具,主要用于生成java虛擬機(jī)當(dāng)前時(shí)刻的線程快照,下面我們就來(lái)學(xué)習(xí)一下它的具體使用吧
    2023-11-11
  • Spring中統(tǒng)一異常處理示例詳解

    Spring中統(tǒng)一異常處理示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring中統(tǒng)一異常處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09

最新評(píng)論