You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

URL构造器弃用后改用URI.toURL()出现类型转换异常求解

问题:URL构造器弃用后的ClassCastException解决方法

原代码

原本运行正常的代码:

URL url = new URL(urlStr);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();

问题背景

升级至最新Spring/库版本后,new URL(String url)构造器被标记为弃用,官方建议使用URI.toURL()构建URL实例。

错误改写与异常

尝试用Path转URI的方式改写代码:

Path path = Paths.get(urlStr);
URI uri = path.toUri();
HttpsURLConnection con = (HttpsURLConnection) uri.toURL().openConnection();

运行时抛出类型转换异常:

java.lang.ClassCastException: class sun.net.www.protocol.file.fileurlconnection cannot be cast to class javax.net.ssl.HttpsURLConnection (sun.net.www.protocol.file.fileurlconnection and javax.net.ssl.HttpsURLConnection are in module java.base of loader 'bootstrap')

原因分析

Paths.get(urlStr)是本地文件系统路径的处理API,它会把传入的URL字符串当作本地文件路径解析,生成的URI是file:协议类型。此时调用openConnection()返回的是本地文件连接,而非HTTPS连接,因此无法强转成HttpsURLConnection。

正确改写方案

直接使用URI类的构造器解析网络URL,再转换为URL:

try {
    URI uri = new URI(urlStr);
    URL url = uri.toURL();
    HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
    // 后续操作...
} catch (URISyntaxException | MalformedURLException e) {
    // 处理URL/URI格式异常
    e.printStackTrace();
}

说明

  1. new URI(urlStr)直接解析网络URL字符串,保留原有的http/https协议类型,不会被当作本地文件路径处理。
  2. 需要处理URISyntaxException(URI构造时的格式异常)和MalformedURLException(URL转换时的格式异常),这两个都是受检异常。
  3. 当urlStr是HTTPS协议时,openConnection()返回的实例可以安全强转为HttpsURLConnection。

内容的提问来源于stack exchange,提问作者Владимир Гичев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:59:53