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

Java 20迁移:替换已弃用的java.net.URL构造器方案咨询

解决Java 20中java.net.URL(String)构造器弃用问题,保留原有URL处理逻辑

由于你已经依赖Galimatias URL库,完全可以用它替代new URL(link)的逻辑,精准匹配原构造器的两个核心行为:处理含空格的URL、拒绝无效的非ASCII域名链接。


具体实现步骤

  1. 替换URL构造器为Galimatias的Url.parse()
    Galimatias的Url.parse()方法会自动将空格编码为%20,且对不符合规范的URL(如未编码的国际化域名http://промкаталог.рф/)抛出URLParseException,和原URL构造器抛出MalformedURLException的校验逻辑完全对齐。

  2. 代码修改示例
    假设你的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());
        }
    }
}
  1. 行为一致性验证
  • 空格处理:http://example.com/test space会被编码为http://example.com/test%20space,和原URL构造器行为完全一致。
  • 无效URL拦截:解析http://промкаталог.рф/时,Galimatias会抛出异常,和原new URL(link)的拒绝逻辑一致,不会像URI.create()那样尝试转换该无效链接。
  1. 关键说明
  • 无需引入新依赖,直接复用已有的Galimatias库。
  • 保持原有异常处理逻辑,避免调用方代码需要修改。

内容的提问来源于stack exchange,提问作者Lakatos Gyula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:22:50