Java 20迁移:替换已弃用的java.net.URL构造器方案咨询
解决Java 20中
java.net.URL(String)构造器弃用问题,保留原有URL处理逻辑 由于你已经依赖Galimatias URL库,完全可以用它替代new URL(link)的逻辑,精准匹配原构造器的两个核心行为:处理含空格的URL、拒绝无效的非ASCII域名链接。
具体实现步骤
替换URL构造器为Galimatias的
Url.parse()
Galimatias的Url.parse()方法会自动将空格编码为%20,且对不符合规范的URL(如未编码的国际化域名http://промкаталог.рф/)抛出URLParseException,和原URL构造器抛出MalformedURLException的校验逻辑完全对齐。代码修改示例
假设你的UrlEncoder类原有代码片段如下:
import java.net.MalformedURLException; import java.net.URL; public class UrlEncoder { public String encode(String link) throws MalformedURLException { URL url = new URL(link); // 后续基于URL对象的编码、校验逻辑 return url.toString(); } }
修改为使用Galimatias的版本:
import io.mola.galimatias.Url; import io.mola.galimatias.URLParseException; import java.net.MalformedURLException; public class UrlEncoder { public String encode(String link) throws MalformedURLException { try { // 用Galimatias解析URL,替代new URL(link) Url galimatiasUrl = Url.parse(link); // 直接获取编码后的URL字符串,或转换为URI兼容原有逻辑 return galimatiasUrl.toString(); } catch (URLParseException e) { // 转换为原有代码抛出的异常类型,保持调用方逻辑一致 throw new MalformedURLException(e.getMessage()); } } }
- 行为一致性验证
- 空格处理:
http://example.com/test space会被编码为http://example.com/test%20space,和原URL构造器行为完全一致。 - 无效URL拦截:解析
http://промкаталог.рф/时,Galimatias会抛出异常,和原new URL(link)的拒绝逻辑一致,不会像URI.create()那样尝试转换该无效链接。
- 关键说明
- 无需引入新依赖,直接复用已有的Galimatias库。
- 保持原有异常处理逻辑,避免调用方代码需要修改。
内容的提问来源于stack exchange,提问作者Lakatos Gyula
相关产品推荐
相关产品推荐

