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

Spring项目中如何将自定义异常映射为HTTP 404状态码

问题根因

你现有代码核心逻辑存在两处问题:

  • 空参Optional.orElseThrow()默认只会抛出java.util.NoSuchElementException,和你自定义的DepartmentNotFoundException没有关联,写的catch分支永远不会触发,自然无法映射到404状态码
  • 多余的try-catch包裹,可直接通过orElseThrow传入异常构造函数简化逻辑
修正方案

仅需要修改业务层的getById方法即可,其余三个异常相关类的现有写法无需调整:

@Override
public Department getById(String deptNo) {
    return departmentRepository.findById(deptNo)
            // Optional为空时直接抛出自定义异常
            .orElseThrow(() -> new DepartmentNotFoundException("Department not found for Id: " + deptNo));
}
可选生产环境优化

如果不需要在响应中返回异常堆栈信息,可调整异常返回体和处理器逻辑,避免泄露服务内部信息:

  1. 移除DepartmentException类中的throwable字段及对应构造参数、get方法
  2. 调整handleDepartmentException方法中构造返回体的逻辑,去掉传入异常实例的参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:09:00