zoukankan      html  css  js  c++  java
  • Spring Boot 如何自定义返回错误码错误信息

    说明

    • 在实际的开发过程中,很多时候要定义符合自己业务的错误码和错误信息,而不是统一的而不是统一的下面这种格式返回到调用端
    INTERNAL_SERVER_ERROR(500, "Internal Server Error"),
    

    下面我们来看看如何将我们自定义的错误码和错误信息返回到调用端。

    1 自定义错误码

    • 首先我们要定义一个枚举类
    public enum ErrorEnum {
    	/*
    	 * 错误信息
    	 * */
    	E_20011(20011, "缺少必填参数"),
    
    	;
    
    	private Integer errorCode;
    	private String errorMsg;
    	ErrorEnum(Integer errorCode, String errorMsg) {
    		this.errorCode = errorCode;
    		this.errorMsg = errorMsg;
    	}
    	public Integer getErrorCode() {
    		return errorCode;
    	}
    	public String getErrorMsg() {
    		return errorMsg;
    	}
    

    2 定义一个异常类

    • 定义一个异常类继承RuntimeException类
    public class BusinessException extends RuntimeException {
    
        private static final long serialVersionUID = 1L;
    
        private Integer code;
    
        /**
         * @param errorEnum 以错误的ErrorEnum做参数
         */
        public BusinessException(ErrorEnum errorEnum) {
            super(errorEnum.getErrorMsg());
            this.code = errorEnum.getErrorCode();
            this.resultJson = CommonUtil.errorJson(errorEnum);
        }
        
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    
    
    
    }
    

    3 定义一个异常返回的模板类

    • 模板类定义了如何将异常通过什么形式进行返回。
    public class ExceptionResponse {
    
        private String message;
        private Integer code;
    
        public ExceptionResponse(Integer code, String message) {
            this.message = message;
            this.code = code;
        }
    
        public static ExceptionResponse create(Integer code, String message) {
            return new ExceptionResponse(code, message);
        }
    
        public Integer getCode() {
            return code;
        }
    
        public String getMessage() {
            return message;
        }
    
    }
    

    4 定义全局处理 Controller 层异常

    @ControllerAdvice
    @Slf4j
    public class ExceptionHandler {
    
        @ResponseBody
        @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
        @ExceptionHandler(Exception.class)
        public ExceptionResponse handleException(Exception ex) {
            if (ex instanceof BusinessException) {
                log.warn(ex.getMessage(), ex);
                BusinessException businessException = (BusinessException) ex;
                return ExceptionResponse.create(businessException.getCode(), businessException.getMessage());
            } else {
                log.error(ex.getMessage(), ex);
                return ExceptionResponse.create(HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getMessage());
            }
        }
    
    }
    

    5 演示效果

    • 定义Controller层
    @PostMapping("test/exception")
        public String testException() {
            throw new BusinessException(ErrorEnum.E_20011);
        }
    
    • 通过postMan调用返回结果为
      { "message": "缺少必填参数", "code": 20011 }
  • 相关阅读:
    排序_简单选择排序
    排序_冒泡排序
    笔试_阿里_逆波兰表达式
    刷题_牛客_大整数排序
    刷题_牛客_字符串编码
    刷题_thinkinginjava_吸血鬼数字
    刷题_牛客_超级素数幂
    刷题_LeetCode_Two Sum
    刷题_LeetCode_Reverse Integer
    854. Floyd求最短路(模板)
  • 原文地址:https://www.cnblogs.com/karlMa/p/11343820.html
Copyright © 2011-2022 走看看