RestTemplate经典问题:%被转码为%25导致url错误

本文讲述了开发者在使用Spring的RestTemplate发送请求时遇到的URL编码问题,分析了编码冲突,提出了解决方案:使用URI对象而非字符串直接发送,以避免额外的编码处理。

一、遇到问题

今天要写一个接口,收到请求后,给第三方接口发送请求,第三方接口会创建一个聊天室,然后返回报文。

碰到一个问题:

使用restTemplate.getForObject()发送请求时,获取的响应报文显示:{"message":"url请求非法!"},无法获取正确的响应报文。

代码如下:

//样例url
String url = "http://10.111.222.333/live";
String cid = "USER_NAME_EXAMPLE";
String signCode = "LIKEPASS123ABC456";

String roomId = "@ABC#1A2B3C";

String tail = "/chatRoom/create_room?cid="+cid+"&timestamp="+System.currentTimeMillis()+"&roomId="+URLEncoder.encode(roomId);
String sign = "&sign="+signCode;
String s = MD5Util.computeMD5(tail+sign);

//获得最终的url
url = url + tail + "&md5=" + s;

RestTemplate restTemplate = new RestTemplate();
//发送请求并用String格式获取响应报文
String backStr = restTemplate.getForObject(url, String.class);
//将响应报文转为JSONObject格式
JSONObject backJson = JSONObject.fromObject(backStr);

//打印下请求地址,url
System.out.println(url);
//打印下响应报文,backStr
System.out.println(backStr);

调用接口后,收到的错误的响应报文:

{"messa
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐梦想永不停

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值