介绍

在SpringBoot项目中,可以通过注解 @RestControllerAdvice@ExceptionHandler来编写异常的统一处理

有了异常统一处理之后,我们的代码就会变得更加的简洁和易维护

代码

异常统一处理类

创建异常统一处理类 GlobalExceptionHandler,代码如下:

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    // 获取指定的异常类
    @ExceptionHandler(MessageException.class)
    public Message handleMessageException(Throwable e){
        return Message.error(e.getMessage());
    }

    @ExceptionHandler(IllegalArgumentException.class)
    public void handleIllegalArgumentException(Throwable e){
        if(e.getMessage().contains("RedisCacheConfiguration")){
            log.error("redis不能存储null值,可忽略该报错");
        }
    }

    // 文件上传异常
    @ExceptionHandler(MultipartException.class)
    public Message handleFileUploadException(Throwable e){
        return Message.error(e.getMessage());
    }
}

统一消息Message

Message可以这样定义:

@Data
public class Message {
    boolean code;// true为成功,false为失败
    Object data;// 数据对象
    String msg;

    public Message() {
    }

    public Message(boolean code, String msg ,Object data) {
        this.code = code;
        this.data = data;
        this.msg = msg;
    }

    public static Message success(String msg,Object data){
        return new Message(true,msg,data);
    }
    public static Message success(String msg){
        return new Message(true,msg,null);
    }
    public static Message error(String msg,Object data){
        return new Message(false,msg,data);
    }
    public static Message error(String msg){
        return new Message(false,msg,null);
    }

    //直接转化为json
    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}

依赖

<!-- fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>
<!--lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
</dependency>
0条评论
头像
ICP证 : 浙ICP备18021271号