如何针对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
相关产品推荐
相关产品推荐

