返回顶部
首页 > 资讯 > 服务器 >如何使用SpringBoot处理全局异常
  • 820
分享到

如何使用SpringBoot处理全局异常

springbootjava后端异常处理 2023-10-27 15:10:12 820人浏览 薄情痞子
摘要

如何使用SpringBoot处理全局异常 使用@ControllerAdvice 和 @ExceptionHandler处理全局异常 参考: @ControllerAdvice@ResponseBod

如何使用SpringBoot处理全局异常

使用@ControllerAdvice 和 @ExceptionHandler处理全局异常

参考:

@ControllerAdvice@ResponseBody@Slf4jpublic class ExceptionHandler {    @ResponseStatus(httpstatus.OK)    @org.springframework.WEB.bind.annotation.ExceptionHandler(value = {MissingServletRequestParameterException.class})    public ViewResult<Object> missingServletRequestParameterException(MissingServletRequestParameterException e) {        return ViewResult.state(rpcCode.OPERATION_NOT_PERMITTED_CODE, e.getMessage(), null);    }    @ResponseStatus(HttpStatus.OK)    @org.springframework.web.bind.annotation.ExceptionHandler(value = {Exception.class})    public ViewResult<Object> allException(Exception e) {        ViewResult<Object> result = buildCustomException(e);        if (result == null && e.getCause() != null) {            result = buildCustomException(e.getCause() );        }        if (result != null) {            return result;        }        // 请求传参等spring抛出的异常消息显示出来用于调试        if (e instanceof ServletException || e instanceof NestedRuntimeException) {            log.warn("", e);            return ViewResult.state(RpcCode.SYSTEM_DEFAULT_ERROR_CODE, "请求错误:" + e.getMessage(), null);        }        log.error("system error:", e);        return ViewResult.state(RpcCode.SYSTEM_DEFAULT_ERROR, null);    }        private ViewResult<Object> buildCustomException(Throwable e) {        int code = RpcCode.SYSTEM_DEFAULT_ERROR_CODE;        if (e instanceof NoAuthException) {            code = RpcCode.OPERATION_NOT_PERMITTED_CODE;        } else if (e instanceof com.chj.thor.auth.v2.exception.NoAuthException) {            code = RpcCode.OPERATION_NOT_PERMITTED_CODE;        } else if (e instanceof DuplicatedException) {            code = RpcCode.RESOURCE_DUPLICATED_CODE;        } else if (e instanceof NotFoundException) {            code = RpcCode.RESOURCE_NOTFOUND_CODE;        } else if (e instanceof OperationNotPermittedException) {            code = RpcCode.OPERATION_NOT_PERMITTED_CODE;        } else if (e instanceof ParamInvalidException) {            code = apiRpcCode.PARAM_INVALIDATED_CODE;        } else if (e instanceof UrlUnreachableException) {            code = ApiRpcCode.URL_UNREACHABLE_CODE;        } else if (e instanceof ThirdServiceException) {            code = ApiRpcCode.THIRD_SERVICE_CODE;        } else if (e instanceof ThorException) {            code = 500001;        }        if (code != RpcCode.SYSTEM_DEFAULT_ERROR_CODE) {            return ViewResult.state(code, e.getMessage(), null);        }        return null;    }    @ResponseStatus(HttpStatus.BAD_REQUEST)    @org.springframework.web.bind.annotation.ExceptionHandler({            MethodArgumentNotValidException.class,//requestBody校验    })    public ViewResult<Object> methodArgumentNotValidException(MethodArgumentNotValidException e) throws MethodArgumentNotValidException {        log.info("[前置条件校验失败]", e);        Class<?> clazz = e.getParameter().getExecutable().getDeclarinGClass();        //只有Controller层的参数出现问题才进行封装处理,否则直接上抛        if (clazz.getSimpleName().endsWith("Controller")) {            FieldError fieldError = e.getBindingResult().getFieldError();            String message = "INVALID PARAMS";            if (null != fieldError) {                message += ":" + fieldError.getField();                message += ":" + fieldError.getDefaultMessage();            }            return ViewResult.state(IRpcCode.ILLEGAL_ARGUMENT_CODE, message, null);        } else {            throw e;        }    }    @ResponseStatus(HttpStatus.BAD_REQUEST)    @org.springframework.web.bind.annotation.ExceptionHandler({            ConstraintViolationException.class //requestParam校验    })    public ViewResult<Object> constraintViolationException(ConstraintViolationException e) {        log.info("[前置条件校验失败]", e);        Set<ConstraintViolation<?>> validations = e.getConstraintViolations();        StringBuilder message = new StringBuilder("INVALID PARAMS");        //当配置的是failFast模式时,循环只会执行一遍        for (ConstraintViolation<?> v : validations) {            //只有Controller service层的参数出现问题才进行封装处理,否则直接上抛            if (v.getRootBeanClass().getSimpleName().endsWith("Controller") ||                    v.getRootBeanClass().getSimpleName().endsWith("ServiceImpl")) {                message.append(":");                message.append(v.getPropertyPath());                message.append(":");                message.append(v.getMessage());            } else {                throw e;            }        }        return ViewResult.state(IRpcCode.ILLEGAL_ARGUMENT_CODE, message.toString(), null);    }    @ResponseStatus(HttpStatus.BAD_REQUEST)    @org.springframework.web.bind.annotation.ExceptionHandler({            HttpMessageNotReadableException.class, //requestParam校验            HttpRequestMethodNotSupportedException.class,//method不支持            HttpMediaTypeException.class,//ContentType问题            ServletRequestBindingException.class//数据绑定问题    })    public ViewResult<Object> constraintViolationException(Exception e) {        log.info("[客户端数据格式错误]", e);        return ViewResult.state(IRpcCode.ILLEGAL_ARGUMENT_CODE, e.getMessage(), null);    }}

来源地址:https://blog.csdn.net/Kingsea442/article/details/134076763

--结束END--

本文标题: 如何使用SpringBoot处理全局异常

本文链接: https://lsjlt.com/news/494706.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用SpringBoot处理全局异常
    如何使用SpringBoot处理全局异常 使用@ControllerAdvice 和 @ExceptionHandler处理全局异常 参考: @ControllerAdvice@ResponseBod...
    99+
    2023-10-27
    spring boot java 后端 异常处理
  • SpringBoot全局异常处理 | Java
    ⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言...
    99+
    2023-10-12
    java spring boot 后端
  • Java Springboot全局异常处理
    目录前言一、思路?二、步骤1.自定义接口:2.自定义错误枚举3.自定义异常类4.异常捕获5.在代码中抛异常总结前言 对于作为菜鸟程序员的我来说,经常在controller使用try-...
    99+
    2024-04-02
  • SpringBoot全局异常处理方式
    目录SpringBoot全局异常处理springboot全局异常处理——@ControllerAdvice+ExceptionHandler一、全局捕获异常后,返回json给浏览器二...
    99+
    2024-04-02
  • springboot全局异常处理详解
    一、单个controller范围的异常处理package com.xxx.secondboot.web;import org.springframework.web.bind.annotation.ExceptionHandler;impo...
    99+
    2023-05-31
    spring boot 全局异常
  • Java中如何实现Springboot全局异常处理
    这篇文章主要为大家展示了“Java中如何实现Springboot全局异常处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中如何实现Springboot全局异常处理”这篇文章吧。一、思路...
    99+
    2023-06-25
  • 详解如何在SpringBoot项目中使用全局异常处理
    目录1. 创建自定义异常2.创建全局异常处理器3.创建测试控制器在完整的项目开发中,异常的出现几乎是无法避免的;如果凡是有可能出现异常的地方,我们都手动的使用try-catch将其捕...
    99+
    2022-11-13
    SpringBoot全局异常处理 SpringBoot 异常处理
  • springboot如何实现全局异常处理及自定义异常类
    这篇文章主要介绍springboot如何实现全局异常处理及自定义异常类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!全局异常处理及自定义异常类全局异常处理定义一个处理类,使用@ControllerAdvice注解。@...
    99+
    2023-06-29
  • SpringBoot全局异常处理方案分享
    目录一 业务场景二 全局系统异常类一)全局系统异常类二) 包装异常返回结果给前端,修改自定义异常三 返回案例一 业务场景 调用接口时需要对属性进行校验,比如属性长度,当属性为邮箱时校...
    99+
    2024-04-02
  • SpringBoot 全局异常处理——解决404/500
    SpringBoot 全局异常处理——解决404/500 SpringBoot要全局处理 Spring Boot 应用程序中的 HTTP 404 和 500 错误,您可以自定义一个异常处理器类,并使用...
    99+
    2023-09-28
    spring boot java 后端
  • 如何在SpringBoot中实现全局异常处理方式
    如何在SpringBoot中实现全局异常处理方式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。springboot是什么springboot一种全新的编程规范,...
    99+
    2023-06-14
  • springboot框架的全局异常怎么处理
    这篇文章主要介绍“springboot框架的全局异常怎么处理”,在日常操作中,相信很多人在springboot框架的全局异常怎么处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”springboot框架的全局...
    99+
    2023-06-13
  • SpringBoot全局异常处理方式是什么
    这篇文章主要讲解了“SpringBoot全局异常处理方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot全局异常处理方式是什么”吧!SpringBoot全局异常处理为...
    99+
    2023-06-25
  • 使用aop实现全局异常处理
    本文实例为大家分享了使用aop实现全局异常处理的具体代码,供大家参考,具体内容如下 日常业务中存在的问题 使用大量的try/catch来捕获异常导致整个控制层代码可读性极差,并且此类...
    99+
    2024-04-02
  • SpringBoot统一接口返回及全局异常如何处理
    这篇文章主要介绍“SpringBoot统一接口返回及全局异常如何处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot统一接口返回及全局异常如何处理”文章能帮助大家解决问题。一、Sp...
    99+
    2023-07-02
  • springboot实现全局异常处理及自定义异常类
    目录全局异常处理及自定义异常类全局异常处理定义一个业务异常的枚举全局异常处理配置springboot Restful使用springboot 返回 ModelAndView全局异常处...
    99+
    2024-04-02
  • SpringBoot配置全局异常处理器捕获异常详解
    目录1.前言2.全局异常并处理的方法一(@ControllerAdvice 和 @ExceptionHandler)3.全局异常并处理的方法二 (AOP)总结1.前言 任何系统,我们...
    99+
    2023-05-14
    spring boot全局异常处理 springboot捕获异常 springboot异常处理机制
  • SpringBoot怎么配置全局异常处理器捕获异常
    本篇内容主要讲解“SpringBoot怎么配置全局异常处理器捕获异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么配置全局异常处理器捕获异常”吧!1.前言任何系统,我们不...
    99+
    2023-07-05
  • ASP.NETCore全局异常处理
    一、前言 在程序设计中,我们会遇到各种各样的异常问题,一个好的异常处理解决方案能够帮助开发者快速的定位问题,也能够给用户更好的用户体验。那么我们在AspNetCore中该如何捕获和处...
    99+
    2024-04-02
  • Vue3如何进行全局异常处理
    本篇内容主要讲解“Vue3如何进行全局异常处理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3如何进行全局异常处理”吧!在开发组件库或者插件,经常会需要进行全局异常处理,从而实现:全局统一...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作