您好,登錄后才能下訂單哦!
今天小編給大家分享一下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源碼:org.springframework.web.client.RestTemplate#initUriTemplateHandler
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參數傳遞”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。