throw new Exception 如何指定返回code

解决方案:自定义异常类(推荐)

Java标准库中的ExceptionRuntimeException等基础异常类都没有提供错误码(code)的属性,因此最常用、最灵活的方式是创建自定义异常类 ,在其中添加code属性并提供对应的构造方法。

根据业务场景,你可以选择继承受检异常Exception)或非受检异常RuntimeException,更推荐用于业务异常,无需强制捕获)。

1. 自定义业务异常类(带错误码)
java 复制代码
/**
 * 自定义业务异常类,支持错误码和错误消息
 */
public class BusinessException extends RuntimeException {
    // 错误码
    private int code;

    // 构造方法1:只传错误消息(默认错误码,比如500)
    public BusinessException(String message) {
        super(message);
        this.code = 500; // 默认系统错误码
    }

    // 构造方法2:传错误码和错误消息(核心)
    public BusinessException(int code, String message) {
        super(message);
        this.code = code;
    }

    // 构造方法3:传错误码、消息和异常原因(用于异常链)
    public BusinessException(int code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }

    // 获取错误码的getter方法
    public int getCode() {
        return code;
    }
}
2. 使用自定义异常(指定code)
java 复制代码
// 抛出异常:指定错误码(比如401:未授权)和消息
throw new BusinessException(401, "未携带 Token,请登录");
3. 捕获异常并获取code
java 复制代码
try {
    // 执行可能抛出异常的逻辑
    throw new BusinessException(401, "未携带 Token,请登录");
} catch (BusinessException e) {
    // 获取错误码和消息
    int code = e.getCode();
    String message = e.getMessage();
    System.out.println("错误码:" + code + ",错误消息:" + message);
}

补充:框架自带的异常(适用于特定场景)

如果你使用了Spring、Spring Boot等框架,部分框架提供了支持状态码的异常,但这些主要是HTTP状态码,而非业务错误码:

  • ResponseStatusException (Spring提供):用于指定HTTP状态码和消息,比如new ResponseStatusException(HttpStatus.UNAUTHORIZED, "未携带 Token,请登录")
  • HttpClientErrorException:用于HTTP客户端的异常,携带HTTP状态码。
相关推荐
203号居民16 小时前
LeetCode hot 100 —560. 和为 K 的子数组
java·算法·leetcode
名字还没想好☜17 小时前
Go 的 io.Reader/Writer 组合实战:io.Copy、TeeReader、MultiWriter 优雅处理数据流
开发语言·后端·golang·go·iphone
浪客川17 小时前
使用 IDEA 生成API文档
java·ide·intellij-idea
郝学胜-神的一滴17 小时前
Qt 高级编程 042:进度条从入门到自定义美化
开发语言·c++·qt·软件开发·用户界面
鸿芯微控科技17 小时前
压电纳米定位分辨率怎么测?噪声、带宽、最小可检测位移与Python分析
开发语言·python·噪声分析·压电执行器·纳米定位·位移测量
上下求索,莫负韶华17 小时前
笔记-数据库事务和java事务和切面
java·数据库·笔记
@小匠17 小时前
Spring Boot Nacos绑定 Map 时中文 key 导致启动失败:一次从复现到源码的排查实录
java·开发语言·前端
Knight_AL17 小时前
Lombok @Builder 踩坑:build() 前后对象类型不一样
android·java·开发语言
神明不懂浪漫18 小时前
【第五章】队列
开发语言·数据结构·经验分享·笔记·算法
吃好睡好便好18 小时前
MATLAB仿真框图3
开发语言·matlab·仿真·simulink