<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
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引數傳遞詳解的文章就介紹到這了,更多相關RestTemplate引數傳遞內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45