配置全局异常

前言

本篇文章讲的是配置全局异常,其实就是一个注解就能搞定的事,但是与之配套的还有自定义异常和返回结果封装类,能让代码或错误信息更规整,易查看


1.返回结果类

代码如下(示例):

@Data
@JsonInclude(Include.NON_EMPTY)
public class ResponseResult<T> {
	// 返回请求是否成功
	private boolean success;
	
	private String errorCode;
	
	private String errorMessage;
	// 成功时的返回数据
	private T data;

	private ResponseResult() {
	}

	protected ResponseResult(boolean success, String errorCode, String errorMessage, T data) {
		this.success = success;
		this.errorCode = errorCode;
		this.errorMessage = errorMessage;
		this.data = data;
	}

	public static <T> ResponseResult<T> success() {
		return new ResponseResult<>(true, null,null, null);
	}

	public static <T> ResponseResult<T> success(T data) {
		return new ResponseResult<>(true, null, null, data);
	}

	public static <T> ResponseResult<T> failed() {
		return new ResponseResult<>(false, null,null, null);
	}

	public static <T> ResponseResult<T> failed(String errorCode, String errorMessage) {
		return new ResponseResult<>(false, errorCode, errorMessage,null);
	}
}

2.自定义异常类

代码如下(示例):

@Getter
public class GeneralException extends RuntimeException {

    private static final long serialVersionUID = 5816061234716876723L;

    protected final ErrorCode errorCode;

    protected final String errorMessage;

    public GeneralException(ErrorCode errorCode) {
        this.errorCode = errorCode;
        this.errorMessage = errorCode.getMessage();
    }

    public GeneralException(ErrorCode errorCode, String errorMessage) {
        super(errorMessage);
        this.errorCode = errorCode;
        this.errorMessage = errorMessage;
    }

}

3.异常code枚举

代码如下(示例):

public enum ErrorCode {

    INVALID_REQUEST("E10001", "Bad request."),
    NOT_FOUND("E10003", "Target data not Found."),
    SYSTEM_ERROR("E10004", "System Error."),
    INVALID_ACCESS_TOKEN("E10006", "Invalid access token."),
    INVALID_REFRESH_TOKEN("E10007", "Invalid refresh token.");

    private final String code;
    private final String message;

    ErrorCode(String code, String message) {
        this.code = code;
        this.message = message;
    }
    public String getCode() {
        return this.code;
    }
    public String getMessage() {
        return this.message;
    }
}

4.全局异常类

代码如下(示例):

// 能够拦截所有接口
@RestControllerAdvice
public class GlobalExceptionHandler {
	// 自定义的异常
    @ExceptionHandler(GeneralException.class)
    public ResponseResult handleException(GeneralException e) {
        return ResponseResult.failed(e.getErrorCode());
    }

	// 校验参数@NotEmpty,@NotBlank当参数为null或""时会抛这个异常
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public ResponseResult handleValidationException(MethodArgumentNotValidException e) {
        
        String message = e.getBindingResult().getFieldErrors().stream().map(fieldError ->
        fieldError.getField() + ":" + fieldError.getDefaultMessage()).collect(Collectors.joining(","));

        return ResponseResult.failed(ErrorCode.INVALID_REQUEST.getCode(), message);
    }

    @ExceptionHandler(Exception.class)
    public ResponseResult handleException(Exception e) {
        return ResponseResult.failed(ErrorCode.SYSTEM_ERROR.getCode(), ErrorCode.SYSTEM_ERROR.getMessage());
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值