文章

全局自定义异常处理能力

全局自定义异常处理能力

1.当只需要给前端返回异常信息时

系统中的业务异常按如下方式抛出,异常信息会按照统一的数据格式封装后返回给前端页面。

1
throw new BusinessException("删除角色前请先解除角色关联的权限!");


2.当需要同时给前端返回自定义异常编码和异常信息时

定义异常枚举信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.framework.backend.enums;

import org.springframework.http.HttpStatus;

/**
 * @author xiafeng
 */
@SuppressWarnings("AlibabaEnumConstantsMustHaveComment")
public enum ResultCode {
  SUCCESS(HttpStatus.OK.value(), "成功"),
  FAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "系统内部错误"),
  UNAUTHORIZED(HttpStatus.UNAUTHORIZED.value(), "未授权访问"),
  FORBIDDEN(HttpStatus.FORBIDDEN.value(), "禁止访问"),
  LOGIN_FAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "用户账号或密码输入错误"),
  CAPTCHA_FAIL(HttpStatus.INTERNAL_SERVER_ERROR.value(), "验证码输入错误"),
  PASSWORD_EXPIRED(HttpStatus.INTERNAL_SERVER_ERROR.value(), "用户密码过期错误"),
  LOGIN_SUCCESS(HttpStatus.OK.value(), "用户登录成功"),
  LOGOUT_SUCCESS(HttpStatus.OK.value(), "用户登出成功"),
  MULTIPLE_LOGIN(HttpStatus.UNAUTHORIZED.value(), "用户重复登录"),

  USER_ORGID_IS_NULL(30001, "用户组织id为空!"),
  USER_ACCOUNT_REPEAT(30002, "用户登录名重复!");

  private Integer code;
  private String message;

  ResultCode() {}

  ResultCode(Integer code, String message) {
    this.code = code;
    this.message = message;
  }

  public Integer getCode() {
    return code;
  }

  public void setCode(Integer code) {
    this.code = code;
  }

  public String getMessage() {
    return message;
  }

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

使用异常枚举信息:

1
throw new BusinessException(ResultCode.USER_ACCOUNT_REPEAT);

不使用异常枚举信息时:

1
2
//框架版本>=1.2.0时,还可以直接设置异常编码
throw new BusinessException(10000, "用户组织id为空!");
本文由作者按照 CC BY 4.0 进行授权