欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot中如何进行统一异常处理

程序员文章站 2022-03-03 09:17:41
目录1、处理前2、进行系统异常全局处理3、进行自定义异常处理总结如何在springboot项目里进行统一异常处理 需要了解的知识@controlleradvice的作用1、处理前异常代码/**...

如何在springboot项目里进行统一异常处理 需要了解的知识

@controlleradvice的作用

1、处理前

异常代码

/**
     * 根据id获取医院设置
     *
     * @param id 查看的id编号
     * @return
     */
@apioperation(value = "根据id获取医院设置")
@getmapping("/findhospbyid/{id}")
public result findhospbyid(@pathvariable long id) {
    // 模拟异常(因为除数不能为0)
    int a = 1 / 0;
    hospitalset hospitalset = hospitalsetservice.getbyid(id);
    return result.ok(hospitalset);
}

swagger2输出结果

SpringBoot中如何进行统一异常处理

2、进行系统异常全局处理

添加全局异常处理类

SpringBoot中如何进行统一异常处理

代码

package com.fafa.yygh.common.exception;

import com.fafa.yygh.common.result.result;
import org.springframework.web.bind.annotation.controlleradvice;
import org.springframework.web.bind.annotation.exceptionhandler;
import org.springframework.web.bind.annotation.responsebody;

/**
 * 全局异常处理
 *
 * @author sire
 * @version 1.0
 * @date 2022-02-02 21:01
 */
@controlleradvice
public class globalexceptionhandler {
    /**
     * 系统异常处理
     *
     * @param e
     * @return
     */
    @exceptionhandler(exception.class)
    @responsebody
    public result error(exception e) {
        e.printstacktrace();
        return result.fail();
    }
}

swagger2结果

SpringBoot中如何进行统一异常处理

3、进行自定义异常处理

开发时,往往需要我们去定义处理一些异常(这里还是那上面的那个异常来做测试)

创建自定义异常处理类

package com.fafa.yygh.common.exception;

import com.fafa.yygh.common.result.resultcodeenum;
import io.swagger.annotations.apimodel;
import io.swagger.annotations.apimodelproperty;
import lombok.data;

/**
 * 自定义全局异常类
 *
 * @author qy
 */
@data
@apimodel(value = "自定义全局异常类")
public class yyghexception extends runtimeexception {

    @apimodelproperty(value = "异常状态码")
    private integer code;

    /**
     * 通过状态码和错误消息创建异常对象
     *
     * @param message
     * @param code
     */
    public yyghexception(string message, integer code) {
        super(message);
        this.code = code;
    }

    /**
     * 接收枚举类型对象
     *
     * @param resultcodeenum
     */
    public yyghexception(resultcodeenum resultcodeenum) {
        super(resultcodeenum.getmessage());
        this.code = resultcodeenum.getcode();
    }

    @override
    public string tostring() {
        return "yyghexception{" +
            "code=" + code +
            ", message=" + this.getmessage() +
            '}';
    }
}

将其添加到globalexceptionhandler

/**
     * 自定义异常处理
     *
     * @param e
     * @return
     */
@exceptionhandler(yyghexception.class)
@responsebody
public result diverror(yyghexception e) {
    return result.build(e.getcode(), e.getmessage());
}

SpringBoot中如何进行统一异常处理

需要手动 try catch 一下

SpringBoot中如何进行统一异常处理

效果

swagger和系统异常处理一样

不过后台输出不一样

SpringBoot中如何进行统一异常处理

总结

到此这篇关于springboot中如何进行统一异常处理的文章就介绍到这了,更多相关springboot异常处理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!