91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RestTemplate?Get請求如何實現bean參數傳遞

發布時間:2022-11-18 10:15:41 來源:億速云 閱讀:159 作者:iii 欄目:開發技術

今天小編給大家分享一下RestTemplate Get請求如何實現bean參數傳遞的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

項目場景

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

RestTemplate實現request param參數傳送,如果如下所示,直接傳一個map對象,調試之后是不會接收到參數的

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);

問題描述

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

RestTemplate?Get請求如何實現bean參數傳遞

原因分析

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

RestTemplate?Get請求如何實現bean參數傳遞

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

解決方案

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

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 構建請求的鏈接,也是拼參數的方法
        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);

運行之后,可以發現參數帶上去了,之后調第三方接口,直接傳個javabean就可以,方便很多,也可以對javabean轉map的操作進行封裝,之后直接調用

RestTemplate?Get請求如何實現bean參數傳遞

以上就是“RestTemplate Get請求如何實現bean參數傳遞”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳谷县| 阳朔县| 上思县| 卢龙县| 繁峙县| 偏关县| 林西县| 彭阳县| 沈丘县| 安新县| 江油市| 临江市| 东兰县| 和政县| 新昌县| 白银市| 黄石市| 苍梧县| 彰化县| 柳河县| 龙泉市| 建阳市| 岑巩县| 吴堡县| 墨竹工卡县| 固始县| 吉林省| 寿光市| 湘阴县| 福鼎市| 湘西| 阳西县| 青神县| 渑池县| 威海市| 泰宁县| 涞源县| 肥东县| 永寿县| 彩票| 上高县|