Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 432|回复: 0

springboot自定义异常RESTful返回异常

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-6-13 09:10:47 | 显示全部楼层 |阅读模式

    1.自定义异常类

    package com.zhx.common.exception;
    
    import com.zhx.common.model.ErrorCode;
    
    /**
     * @Author: SimonHu
     * @Date: 2019/8/23 13:59
     * @Description:i自定义异常
     */
    public class CustomException extends RuntimeException {
        private String code;
        
        /**
         * @return
         * @Description:无参构造函数
         * @Author:SimonHu
         * @Date: 2019/8/23 14:00
         */
        public CustomException() {
            super();
        }
        
        /**
         * @param message
         * @return
         * @Description:用详细信息指定一个异常
         * @Author:SimonHu
         * @Date: 2019/8/23 14:00
         */
        public CustomException(String message) {
            super(message);
            this.code = ErrorCode.ACCESS_ERROR.getCode();
        }
        
        public CustomException(String code, String message) {
            super(message);
            this.code = code;
        }
        
        /**
         * @param message
         * @param cause
         * @return
         * @Description:用指定的详细信息和原因构造一个新的异常
         * @Author:SimonHu
         * @Date: 2019/8/23 14:01
         */
        public CustomException(String message, Throwable cause) {
            super(message, cause);
        }
        
        /**
         * @param cause
         * @return
         * @Description:用指定原因构造一个新的异常
         * @Author:SimonHu
         * @Date: 2019/8/23 14:01
         */
        public CustomException(Throwable cause) {
            super(cause);
        }
        
        public String getCode() {
            return code;
        }
        
        public void setCode(String code) {
            this.code = code;
        }
    }

    2.枚举错误码

    package com.zhx.common.model;
    
    /**
     * @Author: SimonHu
     * @Date: 2019/8/21 15:47
     * @Description:
     */
    public enum ErrorCode {
        ACCESS_ERROR("403", "访问被禁止"),
        BRADN_GOODS_INFO_ERROR("209", "查询不到品牌对应产品信息"),
        DECIPHER_FAIL("208", "解密失败"),
        BUSSINESSTYPE_NULL("207", "bussinessType不能为空"),
        REQUEST_ID_NULL("206", "requestId不能为空"),
        REQUEST_DOUBLE("205", "提交请求重复"),
        REQUEST_FAIL("204", "查询信息失败"),
        SIGN_ERROR("203", "签名错误"),
        PARAM_NOT_FULL("202", "请求参数不全"),
        SYS_ERROR("500", "系统错误");
        
        ErrorCode(String code, String msg) {
            this.code = code;
            this.msg = msg;
        }
        
        public static String getCodeInfo(String code) {
            for (ErrorCode info : ErrorCode.values()) {
                if (code.equals(info.getCode())) {
                    return info.getMsg();
                }
            }
            return "其他错误";
        }
        
        private String code;
        private String msg;
        
        @Override
        public String toString() {
            return "ErrorCodeEnum{" +
                    "code=" + code +
                    ", msg='" + msg + '\'' +
                    '}';
        }
        
        public String getCode() {
            return code;
        }
        
        public void setCode(String code) {
            this.code = code;
        }
        
        public String getMsg() {
            return msg;
        }
        
        public void setMsg(String msg) {
            this.msg = msg;
        }
        
        public static void main(String[] args) {
            System.out.println(ErrorCode.REQUEST_FAIL.getCode());
            System.out.println(ErrorCode.REQUEST_FAIL.getMsg());
        }
    }

    3.全局异常捕获类

    package com.zhx.common.config;
    
    import com.zhx.common.exception.CustomException;
    import com.zhx.common.model.ErrorCode;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * @Author: SimonHu
     * @Date: 2019/8/21 10:17
     * @Description:全局异常捕获
     */
    @ControllerAdvice
    public class GlobalExceptionHandler {
        private Logger logger = LoggerFactory.getLogger(getClass().getName());
        
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public Result jsonHandler(HttpServletRequest request, Exception e) throws Exception {
            if ("org.apache.catalina.connector.ClientAbortException".equals(e.getClass().getName())) {
                logger.error("发生clientAbortException");
                return null;
            }
            logger.error("-----------jsonHandler---错误信息----------:", e);
            return Result.error(ErrorCode.SYS_ERROR.getCode(),e.getMessage(), "");
        }
        
        /**
         * @param request
         * @param e
         * @return com.zhx.common.Result
         * @Description:i自定义异常
         * @Author:SimonHu
         * @Date: 2019/8/23 14:26
         */
        @ExceptionHandler(value = CustomException.class)
        @ResponseBody
        public Result customException(HttpServletRequest request, CustomException e) {
            logger.error("---------customException-----错误信息----------:"+e.getMessage());
            logger.error(getErrrorInfo(e,e.getCode(),e.getMessage(),2));
            return Result.error(e.getCode(), e.getMessage(), "");
        }
        
        /**
         * @param ex
         * @param row 控制打印行数
         * @return java.lang.String
         * @Description:获取错误信息并记录日志
         * @Author:SimonHu
         * @Date: 2019/8/26 16:04
         */
        private String getErrrorInfo(Exception ex, String code, String msg,int row) {
            StringBuilder sb = new StringBuilder();
            StackTraceElement[] error = ex.getStackTrace();
            int i = 0;
            for (StackTraceElement stackTraceElement : error) {
                sb.append(stackTraceElement);
                sb.append("\r\n");
                i++;
                if (i >= row) {
                    break;
                }
            }
            return sb.toString();
        }
    }

    4.针对404和500错误信息我们需要添加两个配置:

    #spring配置
    spring:
      mvc:
        #出现错误时, 直接抛出异常
        throw-exception-if-no-handler-found: true
      resources:
        #不要为我们工程中的资源文件建立映射
        add-mappings: false

     

     

     

     这样错误信息会以json格式返回,result我统一返回的500,实际这是个404错误。

    5.抛出自定义异常信息

     private String getEcardsGoodsIdByFacePrice(String brandId) {
            Map configMap = commonService.selectGateWayGoodsId(brandId);
            if(null==configMap||configMap.isEmpty()){
                throw new CustomException(ErrorCode.BRADN_GOODS_INFO_ERROR.getCode(),brandId+ErrorCode.BRADN_GOODS_INFO_ERROR.getMsg());
            }
            String str = String.valueOf(configMap.get("gateway_goods_id"));
            return str;
        }

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-2 07:48 , Processed in 0.068090 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表