zoukankan      html  css  js  c++  java
  • SpringBoot中的异常处理

    在项目中一般异常都会进行统一管理,在这里采用@ControllerAdvice和@ExceptionHandler进行处理

    一、创建 ErrorVO

    package com.springBoot.pakage.model;

    import lombok.Data;

    @Data
    public class ErrorVO {

    /** 异常编码 */
    private Integer errorCode;

    /** 异常信息 */
    private String errorMessage;
    }

    二、创建异常枚举

    package com.springBoot.pakage.exception;
    
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.springBoot.pakage.constant.Constants;
    
    /**
     * 异常枚举
     */
    public enum ComErrorCode {
        SYSTEM_ERROR                    (3000000, "这是业务异常。"),
        SYSTEM_ERROR_GLOBAL             (3000001, "这是全局异常。"),
    
    
        ;
        private Integer code;
        private String  message;
    
        ComErrorCode(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;
        }
    
        public JSON toJSON(){
            JSONObject jsonObject = new JSONObject();
            jsonObject.put(Constants.ERROR_CODE,code);
            jsonObject.put(Constants.ERROR_MESSAGE,message);
            return jsonObject;
        }
    }

    三、业务异常类

    package com.springBoot.pakage.exception;
    
    import com.alibaba.fastjson.JSONObject;
    import com.springBoot.pakage.constant.Constants;
    
    /**
     * 业务异常类
     */
    public class BaseException extends RuntimeException {
    
        private final Integer errorCode;
        private final String errorMessage;
    
    
        public Integer getErrorCode() {
            return errorCode;
        }
    
        public String getErrorMessage() {
            return errorMessage;
        }
    
        public String getBizErrorMessage() {
            return "【业务异常】---" + errorMessage;
        }
    
        public BaseException() {
            super();
            this.errorCode = null;
            this.errorMessage = null;
        }
    
        public BaseException(String errorMessage) {
            super(errorMessage);
            this.errorCode = null;
            this.errorMessage = errorMessage;
        }
    
        public BaseException(Integer errorCode, String errorMessage) {
            super(errorMessage);
            this.errorCode = errorCode;
            this.errorMessage = errorMessage;
        }
    
        public BaseException(ComErrorCode comErrorCode) {
            super(comErrorCode.getMessage());
            this.errorCode = comErrorCode.getCode();
            this.errorMessage = comErrorCode.getMessage();
        }
    
        public JSONObject toJSON() {
            JSONObject json = new JSONObject();
            json.put(Constants.ERROR_CODE, errorCode);
            json.put(Constants.ERROR_MESSAGE, errorMessage);
            return json;
    
        }
    }

    四、Controller异常处理

    package com.springBoot.pakage.exception.handler;
    
    
    import com.springBoot.pakage.exception.BaseException;
    import com.springBoot.pakage.exception.ComErrorCode;
    import com.springBoot.pakage.model.ErrorVO;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Slf4j
    @ControllerAdvice
    public class ControllerExceptionHandler {
    
        @ExceptionHandler(BaseException.class)
        @ResponseBody
        public ResponseEntity<ErrorVO> handlerLocalException(BaseException e){
          log.error("【自定义业务异常】 -- [{}]",e.getErrorMessage(),e);
            ErrorVO errorVO = new ErrorVO();
            errorVO.setErrorCode(e.getErrorCode());
            errorVO.setErrorMessage(e.getErrorMessage());
            return ResponseEntity.badRequest().body(errorVO);
        }
    
        @ExceptionHandler(Exception.class)
        @ResponseBody
        public ResponseEntity<ErrorVO> handlerException(Exception e){
            log.error("【全局异常处理】--- [{}]",e.getMessage(),e);
            ErrorVO errorVO = new ErrorVO();
            errorVO.setErrorCode(ComErrorCode.SYSTEM_ERROR_GLOBAL.getCode());
            errorVO.setErrorMessage(ComErrorCode.SYSTEM_ERROR_GLOBAL.getMessage());
            return ResponseEntity.badRequest().body(errorVO);
        }
    
    
    
    }
    /**
    * controller接口
    */


    package
    com.springBoot.pakage.controller; import com.alibaba.fastjson.JSONObject; import com.springBoot.pakage.service.TypicalApplicationService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController public class TypicalApplicationController { @Autowired private TypicalApplicationService typicalApplicationService; @GetMapping("/web/info") public ResponseEntity<JSONObject> getInfo(){ JSONObject jsonObject = new JSONObject(); String info = typicalApplicationService.getInfo(); jsonObject.put("STR",info); return ResponseEntity.ok(jsonObject); } @GetMapping("/web/error") public ResponseEntity getInfoError(){ typicalApplicationService.getInfoError(); return ResponseEntity.ok("处理结束"); } }
    /**
    ** 业务层
    **/

    package
    com.springBoot.pakage.service; import com.springBoot.pakage.exception.BaseException; import com.springBoot.pakage.exception.ComErrorCode; import org.springframework.stereotype.Service; @Service public class TypicalApplicationService { public String getInfo(){ if (1==2){ return "aaa"; }else { throw new BaseException(ComErrorCode.SYSTEM_ERROR); } } public void getInfoError(){ int i = 1/0; } }

                                                                                           

    kafka rabbitMq
  • 相关阅读:
    MyEclipe 配置 ivy 插件
    PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?
    Hadoop 中 Eclipse 的配置
    Hadoop 配置好hive,第一次在conf能进入,第二次就不行了,怎么办?
    7系列FPGA远程更新方案-QuickBoot(转)
    Serial interface (RS-232)
    Linux下安装微信(转)
    《图解HTTP》读书笔记(转)
    《图解TCP/IP》读书笔记(转)
    7 Serial Configuration 理解(三)
  • 原文地址:https://www.cnblogs.com/stt101517/p/12987591.html
Copyright © 2011-2022 走看看