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 }
  • 相关阅读:
    Oracle Core 学习笔记二 Transactions 和 Consistency 说明
    Oracle AUTO_SPACE_ADVISOR_JOB 说明
    Windows 下 ftp 上传文件 脚本
    Oracle 11g 中 Direct path reads 特性 说明
    Linux 使用 wget 下载 Oracle 软件说明
    Oracle 10g read by other session 等待 说明
    Oracle 11g RAC INS06006 Passwordless SSH connectivity not set up between the following node(s) 解决方法
    SecureCRT 工具 上传下载数据 与 ASCII、Xmodem、Ymodem 、Zmodem 说明
    Oracle RAC root.sh 报错 Timed out waiting for the CRS stack to start 解决方法
    Oracle RESETLOGS 和 NORESETLOGS 区别说明
  • 原文地址:https://www.cnblogs.com/karlMa/p/11343820.html
Copyright © 2011-2022 走看看