资讯专栏INFORMATION COLUMN

java springboot 全局异常处理

Pines_Cheng / 2702人阅读

摘要:定义全局返回状态响应码响应结果成功失败响应信息响应数据数据总数定义全局成功失败未认证签名错误未登录接口不存在服务器内部错误定义返回工具类定义全局异常处理类测试服务器发生错误,请联系管理员结果服务器发生错误,请联系管理员代码

定义全局返回result

public class Result {

    /**
     * 状态响应码
     */
    private int code;

    /**
     * 响应结果 成功/失败
     */
    private boolean success;

    /**
     * 响应信息
     */
    private String message;

    /**
     * 响应数据
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Object data;

    /**
     * 数据总数
     */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Long totalCount;

    public Result setCode(ResultCode resultCode) {
        this.code = resultCode.code();
        return this;
    }

    public int getCode() {
        return code;
    }

    public boolean isSuccess() {
        return success;
    }

    public Result setSuccess(boolean success) {
        this.success = success;
        return this;
    }

    public String getMessage() {
        return message;
    }

    public Result setMessage(String message) {
        this.message = message;
        return this;
    }

    public Object getData() {
        return data;
    }

    public Result setData(Object data) {
        this.data = data;
        return this;
    }

    public Long getTotalCount() { return totalCount;}

    public Result setTotalCount(Long totalCount) {
        this.totalCount = totalCount;
        return this;
    }

}

定义全局resultCode

public enum ResultCode {

    SUCCESS(200),//成功
    FAIL(400),//失败
    UNAUTHORIZED(401),//未认证(签名错误) 未登录
    NOT_FOUND(404),//接口不存在
    INTERNAL_SERVER_ERROR(500);//服务器内部错误


    private final int code;

    ResultCode(int code) {
        this.code = code;
    }

    public int code() {
        return code;
    }

}

定义返回工具类

@Slf4j
public class ReturnUtils {

    private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";

    public static Result success() {
        return new Result().setCode(ResultCode.SUCCESS)
                .setSuccess(true)
                .setMessage(DEFAULT_SUCCESS_MESSAGE);
    }

    public static Result success(String msg) {
        return new Result().setCode(ResultCode.SUCCESS)
                .setSuccess(true)
                .setMessage(msg);
    }

    public static Result success(String msg, Object data, long totalCount) {
        return new Result().setCode(ResultCode.SUCCESS)
                .setMessage(msg)
                .setData(data)
                .setSuccess(true)
                .setTotalCount(totalCount);
    }

    public static Result fail(String msg) {
        log.error(msg);
        return new Result().setCode(ResultCode.FAIL)
                .setSuccess(false)
                .setMessage(msg);
    }

    public static Result fail(ResultCode code, String msg) {
        log.error(msg);
        return new Result().setCode(code)
                .setSuccess(false)
                .setMessage(msg);
    }

}

定义全局异常处理类

@Slf4j
@RestControllerAdvice
public class ExceptionAdvice {
    @ExceptionHandler(Exception.class)
    public Result exceptionHandler(HttpServletResponse resp, Exception e) {
        log.error(e.getMessage());
        return ReturnUtils.fail(ResultCode.INTERNAL_SERVER_ERROR, e.getMessage());
    }
}

测试

@RequestMapping("test-exception")
    public void testException() {
        try {
            int i = 1 / 0;
        } catch (Exception e) {
            throw new RuntimeException("服务器发生错误,请联系管理员");
        }
    }

结果

{
    "code":500,
    "success":false,
    "message":"服务器发生错误,请联系管理员"
}

代码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74760.html

相关文章

  • SpringBoot:如何优雅地处理全局异常

    摘要:为了贴合主题,本次主要针对全局异常处理进行举例说明。自定义异常处理自定义一个异常自定义异常程序员小明错误码错误信息显而易见,这个异常继承了,属于运行时异常。包括处理其他异常,都是这种方式。 之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Contr...

    李昌杰 评论0 收藏0
  • springboot结合全局异常处理之登录注册验证

    摘要:在学校做一个校企合作项目,注册登录这一块需要对注册登录进行输入合法的服务器端验证,因为是前后端分离开发,所以要求返回数据。 在学校做一个校企合作项目,注册登录这一块需要对注册登录进行输入合法的服务器端验证,因为是前后端分离开发,所以要求返回JSON数据。方法有很多,这觉得用全局异常处理比较容易上手 全局异常处理 首先来创建一个sprIngboot的web项目或模块,目录结构如下 sho...

    leone 评论0 收藏0
  • springboot 全局异常处理配置

    摘要:一使用实现全局异常处理注解定义全局异常处理类指定自定义错误处理方法拦截的异常类型同一个异常被小范围的异常类和大范围的异常处理器同时覆盖,会选择小范围的异常处理器定义异常业务类异常年月日定义自定义异常无数据系统异常年月日定义全局异常处理类异常 一、springboot Restful使用@ControllerAdvice、@ExceptionHandler、@ResponseBody实现...

    刘福 评论0 收藏0
  • Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error

    摘要:挺多人咨询的,异常处理用切面注解去实现去全局异常处理。全局异常处理类,代码如下代码解析如下抽象类是用来处理全局错误时进行扩展和实现注解标记的切面排序,值越小拥有越高的优先级,这里设置优先级偏高。 本文内容 为什么要全局异常处理? WebFlux REST 全局异常处理实战 小结 摘录:只有不断培养好习惯,同时不断打破坏习惯,我们的行为举止才能够自始至终都是正确的。 一、为什么要全局...

    BicycleWarrior 评论0 收藏0
  • SpringBoot 实战 (十四) | 统一处理异常

    摘要:前言如题,今天介绍是如何统一处理全局异常的。主要是用于异常拦截出获取并将设置到消息类中返回。状态码异常拦截类通过加入来声明该类可拦截请求,同时在方法加入并在该注解中指定要拦截的异常类。测试访问测试正常返回数据结果。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 如题,今天介绍 SpringBoot 是如何统一处理全局异常的。SpringBoot 中...

    arashicage 评论0 收藏0

发表评论

0条评论

Pines_Cheng

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<