• 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 }
  • 相关阅读:
    JavaScript随机数
    javascript函数
    hdu 4122(RMQ)2011福州现场赛B题
    hdu 4119 (模拟+字符串)成都现场赛I题
    hdu 4118(树形dp) 成都现场赛H题
    hdu 4115(2-SAT) 2011 成都现场赛E题
    Codeforces Round #237 (Div. 2) 解题报告
    Codeforces Round #234 (Div. 2) 解题报告
    uva 1411(二分图最大权匹配)
    uva 11383(二分图最大权匹配)
  • 原文地址:https://www.cnblogs.com/karlMa/p/11343820.html
Copyright © 2020-2023  润新知