【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)

目录

  • 一、写在前面
  • 二、问题场景
  • 三、场景重现
    • 1.拼接字符串并请求高德url
    • 2.控制台异常提示
    • 3.手动访问对应 `URL` 结果
  • 四、正确流程
    • 1.报错分析
    • 2.查并修改找异常
    • 3.重新运行并请求
  • 五、总结反思
  • 六、写在后面

我希望你能明白什么是真正的勇敢,并不是把枪拿在手里就是勇敢。而是你明明知道会失败,还是会去做,不管发生什么事情,你都会坚持下去。你很少会赢,但总会有赢的时候。
—— 《杀死一只知更鸟》

一、写在前面

高德用户 key 已脱敏,有相关业务功能的朋友可以去高德控制台申请

二、问题场景

最近在做一个请求 url 拉取数据的请求的时候,出现 Illegal character in scheme name at index 0 异常,但是访问对应 url 正常,如下图:

【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)_第1张图片

三、场景重现

1.拼接字符串并请求高德url

URL 地址:

【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)_第2张图片

拼接核心代码:

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 异常。

【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)_第3张图片

3.手动访问对应 URL 结果

我第一反省是 URL 拼接有误,于是手动访问了 URL

【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)_第4张图片

但是 URL 访问正常。

四、正确流程

1.报错分析

于是我仔细看了一下控制台提示,他说我 索引 0 位置有非法字符 ,于是我继续向后看,发现了奇怪的 %20 ,在我的印象里, %20 应该是空格的 html 转义编码。所以我发现了是自己 URL 有误。

【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)_第5张图片

2.查并修改找异常

查找拼接字符串时,第一个字段为:MapConfigConstant.DISTRICT_URL 于是我去看了一下这个静态变量

于是发现他真的有个空格,然后我就把空格删了。

3.重新运行并请求

请求成功,截图如下图:

(图片已失效)

五、总结反思

解决 BUG 后,我又重新试了很多次,每次复制 URL 都没有带空格,应该是第一次拼接时候,将连接写在了注释里,复制粘贴的时候不小心复制了一个空格。

总结:

  1. 复制粘贴时候要小心
  2. 有问题要仔细看控制台报错

六、写在后面

最近工作较忙,需求较多,虽然遇到了很多问题,但是没有时间沉底,就鸽了两周,等忙完这个项目,会逐一记录最近遇到的问题以及解决方案。

欢迎关注,实现期间会经常发一些工作中遇到的问题。

欢迎随时留言讨论,与君共勉,知无不答!

你可能感兴趣的:(Java开发中出现的异常,java,前端,大数据)