resttemplate get请求参数_使用SimpleClientHttpRequestFactory配置RestTemplate的问题

背景:

在使用RestTemplate调用接口是出现了400 Bad Request的异常。

由于接口的参数为json,于是采用了postForEntity进行调用(这样的调用方式在其他的项目调用起来是没有问题的).

调用方式

url: http://xxx.aaa.com?s=/api/fff/dddd

参数格式: json

调用方法: postForEntity(url,json,String.class)

结果:返回400异常

解决

同样的地址、参数、通过postMan访问,能却能够得到正确的响应。一头雾水毫无头绪。理论上不应该有问题的。

后来无意间注意到url中含有s=XXX。尝试url变成httpxxx.aaa.com,把s=XXX用parameter的方式发送过去。返回了302,于是查看服务端日志

6f0d0698bb159687e99e0f9ea18df640.png

服务器日志

无意中发现postMan调用方式会在?s=XXXX前加一个/。

于是把通过restTemplate调用的url改成http://xxx.aaa.com/?s=/api/fff/dddd 重新调用。能够正常响应了。

此时问题搞定了。同时新的问题来了。为什么在其他项目通过少一个/个url能正常访问,而这个项目的不行。

原来在使用SimpleClientHttpRequestFactory配置的RestTemplate,不会对url进行检查。

而是用HttpComponentsClientHttpRequestFactory配置的RestTemplate 会进行rewriteURI

26d68d84664a076f1257f3dd3225baf3.png

进行uri检查

8a150a832132543eae2bef7b7d98ecdd.png

通过WireShark进行抓包对比 两种请求的url

结论

为了避免上面的问题我们还是用HttpComponentsClientHttpRequestFactory来配置RestTemplate,同时还能够用它来配置同时支持忽略证书的方式来访问https。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值