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

Spring Boot REST API中IllegalFormatConversionException异常排查求助

问题排查与解决

错误根源

问题出在ItemNotFoundException的字符串格式化逻辑上:
你定义的(Class<?> entityClass, String id)构造方法中,使用了整数类型的格式化占位符%d,但传入的id是字符串类型,导致String.format执行时直接抛出IllegalFormatConversionException,而非预期的ItemNotFoundException。

错误代码片段:

public ItemNotFoundException(Class<?> entityClass, String id) {
  super(String.format("%s: {%s, id=%d}", DEFAULT_MESSAGE, entityClass.getSimpleName(), id));
}

修复方法

将构造方法中的%d替换为字符串类型占位符%s,匹配传入的String类型id:

public ItemNotFoundException(Class<?> entityClass, String id) {
  super(String.format("%s: {%s, id=%s}", DEFAULT_MESSAGE, entityClass.getSimpleName(), id));
}

验证测试

修复后重新运行单元测试:

  • 当linkRepository.findById("shortLink")返回空时,会正确抛出ItemNotFoundException,assertThrows断言会通过
  • verify(linkRepository, times(0)).save(link)也会生效,因为异常在执行save操作前就已抛出

补充说明

全局异常处理器未生效的原因是:在构造ItemNotFoundException的过程中就提前抛出了格式化异常,导致目标异常根本没有被实例化和抛出,全局处理器自然无法捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:28:11