java优雅的进行异常处理

不说废话,直接开怼(如果不知道@data和@Getter等注解可以了解下lombok,装个插件,爽得一逼)

1.定义一个异常的枚举类

package cn.carryshuai.自定义异常处理.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum ExceptionEnum {

    PRICE_CANNOT_BE_NULL(400, "价格不能为空"),
    PARAM_CANNOT_BE_NULL(400, "参数不能为空"),
    CATEGORY_NOT_FOUND(404, "商品分类没有找到"),
    SPEC_GROUP_NOT_FOUND(404, "商品规格组没有查到"),
    BRAND_SAVE_ERROR(500, "新增品牌失败"),
    GOODS_SAVE_ERROR(500, "新增商品失败"),
    BRAND_NOT_FOUND(404, "品牌没有找到"),
    UPLOAD_FILE_ERROR(500, "文件上传失败"),
    INVALID_FILE_TYPE(400, "无效文件类型"),
    SPEC_PARAM_NOT_FOUND(404,"商品规格参数不存在"),
    GOODS_NOT_FOUND(404,"商品不存在"),
    SPU_DETAIL_NOT_FOUND(404, "商品详情不存在"),
    GOODS_SKU_NOT_FOUND(404,"sku没有找到");
    private int code;
    private String msg;
}

2.定义一个异常的结果集

package cn.carryshuai.自定义异常处理.vo;

import cn.carryshuai.自定义异常处理.enums.ExceptionEnum;
import lombok.Data;

@Data
public class ExceptionResult {
    private int status;
    private String message;
    private Long timestamp;

    public ExceptionResult(ExceptionEnum exceptionEnum) {
        this.status = exceptionEnum.getCode();
        this.message = exceptionEnum.getMsg();
        this.timestamp = System.currentTimeMillis();
    }
}

3.自定义一个异常,继承RunTimeException,里面放着定义的枚举类

package cn.carryshuai.自定义异常处理.exception;

import cn.carryshuai.自定义异常处理.enums.ExceptionEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Getter
public class CarryExcepttion extends RuntimeException {

    private ExceptionEnum exceptionEnum;
}

 

4.创建一个通知,拦截异常

package cn.carryshuai.自定义异常处理.advice;

import cn.carryshuai.自定义异常处理.enums.ExceptionEnum;
import cn.carryshuai.自定义异常处理.exception.CarryExcepttion;
import cn.carryshuai.自定义异常处理.vo.ExceptionResult;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

/**
 * 拦截异常
 */

@ControllerAdvice
public class CommonExceptionHandler {
    @ExceptionHandler(CarryExcepttion.class)
    public ResponseEntity<ExceptionResult> handleException(CarryExcepttion carryExcepttion){
        ExceptionEnum em = carryExcepttion.getExceptionEnum();
        return ResponseEntity.status(em.getCode()).body(new ExceptionResult(em));

    }

}

5.使用自定义的异常

6.异常效果截图

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java异常处理机制可以说非常重要,它能够帮助我们优雅地处理程序中的异常情况。以下是一些关于如何在 Java 中实现优雅异常处理的建议: 1. 使用适当的异常类型:Java 提供了许多内置的异常类型,你应该根据具体情况选择合适的异常类型。这样可以让代码更具可读性,并且方便其他开发人员理解你的代码。 2. 不要捕获所有异常:捕获异常意味着你要对其进行处理,但并不是所有的异常都需要你来处理。只捕获那些你能够处理或者你有必要处理的异常,对于其他异常,可以通过在方法签名中声明 throws 关键字来传递给上层调用者处理。 3. 使用 try-with-resources:对于实现了 AutoCloseable 接口的资源对象,可以使用 try-with-resources 语句来自动关闭资源。这样可以避免资源泄漏,并且能够更好地管理资源。 4. 使用自定义异常:除了使用内置的异常类型,你还可以根据具体需求创建自定义异常。自定义异常可以提供更加具体的异常信息,帮助你更好地定位问题。 5. 记录和处理异常信息:在捕获到异常时,不仅仅是简单地打印异常堆栈信息,你还应该考虑记录异常信息,并根据具体情况进行适当的处理。可以将异常信息写入日志文件,或者返回给用户友好的错误提示。 6. 避免空指针异常:空指针异常是 Java 开发中最常见的异常之一。为了避免空指针异常,你可以使用 null 检查、空对象模式、Optional 类型等方式来处理可能为 null 的对象。 7. 分层处理异常:在程序中可以使用多层的异常处理机制,将底层的异常转换为更高级别的异常,从而能够更好地管理和处理异常。 总之,优雅异常处理需要根据具体情况进行合理选择和实践。通过合适的异常类型、适当的捕获和处理、记录和传递异常信息,以及避免常见的错误,你能够使你的代码更加健壮和可维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值