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

相关推荐
阿在在2 小时前
Spring 系列(三):Spring PostProcessor 顶级扩展接口全解析
java·后端·spring
祈安_2 小时前
深入理解指针(三)
c语言·后端
听风者就是我2 小时前
(LLM系列)文档切分策略详解:Chunk Size 如何决定 RAG 系统的检索天花板
后端
kyrie学java2 小时前
使用SpringBoot框架搭建简易的项目
java·spring boot·spring
野犬寒鸦2 小时前
ArrayList扩容机制深度解析(附时序图详细讲解)
java·服务器·数据结构·数据库·windows·后端
逆境不可逃3 小时前
【从零入门23种设计模式03】创建型之建造者模式(简易版与导演版)
java·后端·学习·设计模式·职场和发展·建造者模式
汤姆yu3 小时前
基于springboot的健身爱好者打卡与互动交流系统
java·spring boot·后端
百锦再4 小时前
Java Map常用方法和实现类深度详解
java·开发语言·spring boot·struts·kafka·tomcat·maven
人道领域4 小时前
SpringBoot vs SpringMVC:以及SpringBoot的全流程开发(1)
java·spring boot·spring
计算机毕设VX:Fegn08955 小时前
计算机毕业设计|基于springboot + vue连锁门店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计