目录
我希望你能明白什么是真正的勇敢,并不是把枪拿在手里就是勇敢。而是你明明知道会失败,还是会去做,不管发生什么事情,你都会坚持下去。你很少会赢,但总会有赢的时候。
—— 《杀死一只知更鸟》
一、写在前面
高德用户 key
已脱敏,有相关业务功能的朋友可以去高德控制台申请
二、问题场景
最近在做一个请求 url
拉取数据的请求的时候,出现 Illegal character in scheme name at index 0
异常,但是访问对应 url
正常,如下图:
三、场景重现
1.拼接字符串并请求高德url
原 URL
地址:
拼接核心代码:
import com.mashibing.internalcommon.constant.MapConfigConstant;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@Service
public class MapDicDistrictClient {
@Value("${map.key}")
private String mapKey;
@Resource
private RestTemplate restTemplate;
public String dicDistrict(String keywords){
// 拼接请求的 url
StringBuilder url = new StringBuilder();
url.append(MapConfigConstant.DISTRICT_URL);
url.append("?");
url.append("keywords=").append(keywords);
url.append("&");
url.append("subdistrict=3");
url.append("&");
url.append("key=").append(mapKey);
System.out.println(url);
ResponseEntity<String> forEntity = restTemplate.getForEntity(url.toString(), String.class);
return forEntity.getBody();
}
}
2.控制台异常提示
控制台出现出现 Illegal character in scheme name at index 0
异常。
3.手动访问对应 URL
结果
我第一反省是 URL
拼接有误,于是手动访问了 URL
。
但是 URL
访问正常。
四、正确流程
1.报错分析
于是我仔细看了一下控制台提示,他说我 索引 0 位置有非法字符 ,于是我继续向后看,发现了奇怪的 %20 ,在我的印象里, %20 应该是空格的 html
转义编码。所以我发现了是自己 URL
有误。
2.查并修改找异常
查找拼接字符串时,第一个字段为:MapConfigConstant.DISTRICT_URL
于是我去看了一下这个静态变量
于是发现他真的有个空格,然后我就把空格删了。
3.重新运行并请求
请求成功,截图如下图:
(图片已失效)
五、总结反思
解决 BUG
后,我又重新试了很多次,每次复制 URL
都没有带空格,应该是第一次拼接时候,将连接写在了注释里,复制粘贴的时候不小心复制了一个空格。
总结:
- 复制粘贴时候要小心
- 有问题要仔细看控制台报错
六、写在后面
最近工作较忙,需求较多,虽然遇到了很多问题,但是没有时间沉底,就鸽了两周,等忙完这个项目,会逐一记录最近遇到的问题以及解决方案。
欢迎关注,实现期间会经常发一些工作中遇到的问题。
欢迎随时留言讨论,与君共勉,知无不答!