springboot的restTemplate发起get请求参数到服务端无法被解析,curl或postman可以正常调用的url。

引言

在使用springboot的restTemplate在内部使用GET请求调用带有参数且参数的值需要URL百分号编码的时候,请求才发到服务端,服务端接收到的依然是URL编码的参数,无法被映射到相应的对象中,可是 使用curl 或者postman 等接口调试工具,却可以调用成功。

处理过程

经过调研与测试DEMO验证发现,restTemplate的public <T> ResponseEntity<T> exchange(String url, HttpMethod method, @Nullable HttpEntity<?> ...) 函数如果直接将UriComponentsBuilder.fromHttpUrl(...).toUriString() 生成的url作为exchange(String url...) 参数调用的话服务端是无法正常接收参数的。使用public <T> ResponseEntity<T> exchange(URI url, HttpMethod method, ...)服务端可以正常接收参数,需要将UriComponentsBuilder.fromHttpUrl(...).toUriString() 生成的url作为参数在URI.create(url)中转化为URI然后再调用参数就可以被正常解析了。

总结

参数需要URL编码的GET请求最好使用public <T> ResponseEntity<T> exchange(URI url, HttpMethod method, ...)进行请求的发起,否则有服务端接收不了参数的可能性。public <T> ResponseEntity<T> exchange(String url, HttpMethod method, @Nullable HttpEntity<?> ...) 在常规情况下调用服务端一般是可以接收到但是有服务端解析参数失败的可能性。

相关推荐
凌云拓界1 小时前
TypeWell全攻略(二):热力图渲染引擎,让键盘发光
前端·后端·python·计算机外设·交互·pyqt·数据可视化
李广坤2 小时前
Spring Boot Validation 使用手册
后端
柒.梧.2 小时前
吃透Spring Bean:生命周期、单例特性、作用域及扩展方式
java·后端·spring
嘻哈baby2 小时前
接口幂等性设计与实战:支付、下单、重试场景怎么搞?
后端
舒一笑2 小时前
IDEA 调试技巧:关联本地源码,告别反编译代码
后端
UrbanJazzerati2 小时前
PostgreSQL 完全实战指南:从小白到高手 DDL篇
后端·面试
UrbanJazzerati2 小时前
Python实现Salesforce Bulk API 2.0批量数据导入:从Excel到云端的高效方案
后端·面试
豆苗学前端3 小时前
彻底讲透医院移动端手持设备PDA离线同步架构:从"记账本"到"分布式共识",吊打面试官
前端·javascript·后端
用户298698530143 小时前
C#中如何创建目录(TOC):使用Spire.Doc for .NET实现Word TOC自动化
后端·c#·.net
大鹏19883 小时前
警惕 Python 的"甜蜜陷阱":Pickle 反序列化漏洞深度剖析
后端