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
相关产品推荐
相关产品推荐

