我是靠谱客的博主 仁爱草莓,最近开发中收集的这篇文章主要介绍使用RestTemplate遇到的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题描述:
1、在使用restTemplate调用外部提供的接口时,怎么调也成功不了(对方返回-9,具体原因未知,可以确定的是走到方法里面了,该接口有些特殊:虽然用的post请求,但是请求参数组装到了url上,类似http://127.0.0.1:8080/xx?info=<123>1</123>);
2、地址已经先被我转义过了,在调用URLEncoder.encode(url)方法;
3、调用 RestTemplate public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables)方法。

代码如下:

分析:
通过打断点,发现在走到RestTemplate#execute(String url,...)方法:
走到

URI expanded = this.getUriTemplateHandler().expand(url, uriVariables);

代码的时候,url特殊字符会转义,所以导致我发送的url和接口提供方的收到的url不一致。

 原因:因为我之前已经用URLEncoder.encode(url)处理过了,而我再调用RestTemplate#postForObject(String url,...)时,它会再转义一遍,导致url发生了变化。

解决方法:

1.新建URI,RestTemplate public <T> T postForObject(URI uri, @Nullable Object request, Class<T> responseType, Object... uriVariables)方法。

 2.不转义地址,直接调用RestTemplate public <T> T postForObject(String url,...)方法,使用与可以自己控制是否含有特殊字符的代码

3.不用RestTemplate,改用别的http框架也可以解决问题(不推荐) 

最后

以上就是仁爱草莓为你收集整理的使用RestTemplate遇到的问题的全部内容,希望文章能够帮你解决使用RestTemplate遇到的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部