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

如何针对Long类型的NumberFormatException自定义错误提示?

如何替换Long类型转换的默认异常提示?

嘿,这个需求很实际,咱们可以通过捕获原生的NumberFormatException,然后替换成自定义的错误提示。下面分两种常用的实现方式给你参考:

方式1:快速实现,直接抛出带自定义消息的异常

如果只是临时需要替换提示,不想额外定义类,直接在捕获异常后重新抛出即可:

public void setPeriod(String input) {
    try {
        // 尝试把输入的字符串转成Long类型
        this.period = Long.parseLong(input);
    } catch (NumberFormatException e) {
        // 捕获原生的格式异常,抛出咱们自定义提示的异常
        throw new RuntimeException("仅允许输入Long类型值", e);
        // 要是不需要保留原始异常的栈信息,也可以只传提示消息:
        // throw new RuntimeException("仅允许输入Long类型值");
    }
}

方式2:自定义异常类(更规范的工程化做法)

如果你的项目有统一的异常管理体系,建议自定义一个业务异常类,这样后续其他场景也能复用:

// 先定义自己的业务异常类
public class InvalidInputException extends RuntimeException {
    // 只传提示消息的构造方法
    public InvalidInputException(String message) {
        super(message);
    }

    // 保留原始异常栈的构造方法,方便排查问题
    public InvalidInputException(String message, Throwable cause) {
        super(message, cause);
    }
}

然后在转换逻辑里用这个自定义异常:

public void setPeriod(String input) {
    try {
        this.period = Long.parseLong(input);
    } catch (NumberFormatException e) {
        // 抛出自定义的业务异常,带上咱们的提示
        throw new InvalidInputException("仅允许输入Long类型值", e);
    }
}

小提醒

  • 保留原始异常(就是把e作为第二个参数传入构造方法)的好处是,排查问题时能看到最初的异常触发点,方便定位根源;如果觉得没必要,也可以只传自定义提示。
  • 要是你用的是Spring这类框架,还可以配合全局异常处理器,把自定义异常转换成更友好的前端响应,不过这就是进阶玩法啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:41:32