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<?> ...) 在常规情况下调用服务端一般是可以接收到但是有服务端解析参数失败的可能性。

相关推荐
SimonKing20 分钟前
Workbuddy太占C盘空间了,写个迁移工具迁走10G的数据
java·后端·程序员
喵了几个咪1 小时前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
开发语言·人工智能·后端·golang
倔强的石头_1 小时前
AI数据库是什么?我把金仓KES的库内三件套拆开看了一遍
后端
杨凯凡2 小时前
Spring Boot 大文件下载如何实现断点续传?HTTP Range、206 与 416 实战
spring boot·后端·http
量化分析码农2 小时前
股票实时行情接口返回字段说明:单次请求的时间字段与数值类型
后端
脚本自动化开发9 小时前
柔光屏平板怎么选?华为 MatePad Air Z 柔光版学
后端
程序猿DD10 小时前
OctaFuse 2.19.0:重做管理后台界面与交互,模型目录同步更新
后端
金銀銅鐵10 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程