广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot如何自定义错误处理逻辑
  • 914
分享到

SpringBoot如何自定义错误处理逻辑

2023-07-04 09:07:05 914人浏览 安东尼
摘要

本篇内容主要讲解“SpringBoot如何自定义错误处理逻辑”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springBoot如何自定义错误处理逻辑”吧!1. 自定义错误页面将自定义错误页面放在

本篇内容主要讲解“SpringBoot如何自定义错误处理逻辑”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习springBoot如何自定义错误处理逻辑”吧!

1. 自定义错误页面

将自定义错误页面放在 templates 的 error 文件夹下,SpringBoot 精确匹配错误信息,使用 4xx.html 或者 5xx.html 页面可以打印错误信息

4xx —— 打印 status 及 message 信息

  <h3 th:text="${status}">page not found</h3>  <h4 th:text="${#message}">We Couldn't Find This Page</h4>

5xx&mdash;&mdash; 打印 message 及 trace 信息

<h4 th:text="${message}">Something went wrong.</h4><p class="nrml-txt" th:text="${trace}">Why not try refreshing you page? Or you can <a href="#" rel="external nofollow" >contact our support</a> if the problem persists.</p>

2. @ControllerAdvice+@ExceptionHandler

自定义全局异常处理类,处理 ArithmeticException 及 NullPointerException 异常

package com.wanqing.admin.exception;import lombok.extern.slf4j.Slf4j;import org.springframework.WEB.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;@Slf4j@ControllerAdvice // 使用此注释public class GlobalExceptionHandler {    @ExceptionHandler({ArithmeticException.class, NullPointerException.class    }) // 使用此注释,大括号内为可以处理的异常信息    public String handleArithException(Exception e){        log.info("异常是:" + e);        return "login"; // 返回一个视图地址(ModelAndView)    }}

原理:

使用 ExceptionHandlerExceptionResolver 异常处理器处理用 @ExceptionHandler 注释的异常

SpringBoot如何自定义错误处理逻辑

3. 使用@ResponseStatus处理自定义异常

自定义异常类示例代码:

import org.springframework.Http.httpstatus;import org.springframework.web.bind.annotation.ResponseStatus;@ResponseStatus(value = HttpStatus.FORBIDDEN, reason = "用户数量太多~~") // 异常可以返回状态码信息public class userToMany extends  RuntimeException{    // 有参构造器    public userToMany(String message){        super(message);    }    public userToMany(){    }}

原理:

ResponseStatusExceptionResolver 处理器可以处理 @ResponseStatus 注解的异常,得到 @ResponseStatus 注解的信息,调用 response.sendError(statusCode) 方法将错误信息返回,并发送 /error 请求,交由底层处理

sendError &mdash;&mdash; 表示此次请求立刻结束,发出 /error 请求,SpringBoot 找谁能处理,都不能处理返回默认的错误页

    protected ModelAndView applyStatusAndReason(int statusCode, @Nullable String reason, HttpServletResponse response) throws IOException {        if (!StringUtils.hasLength(reason)) {            response.sendError(statusCode);        } else {            String resolvedReason = this.messageSource != null ? this.messageSource.getMessage(reason, (Object[])null, reason, LocaleContextHolder.getLocale()) : reason;            response.sendError(statusCode, resolvedReason);        }        return new ModelAndView();    }

4. 框架底层异常

使用 DefaultHandlerExceptionResolver 异常处理器能处理 springMVC 底层异常,其能处理我异常种类如下

    protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex) {        try {            if (ex instanceof HttpRequestMethodNotSupportedException) {                return this.handleHttpRequestMethodNotSupported((HttpRequestMethodNotSupportedException)ex, request, response, handler);            }// 此处省略.............            if (ex instanceof HttpMessageNotWritableException) {                return this.handleHttpMessageNotWritable((HttpMessageNotWritableException)ex, request, response, handler);            }            if (ex instanceof MethodArgumentNotValidException) {                return this.handleMethodArgumentNotValidException((MethodArgumentNotValidException)ex, request, response, handler);            }        } catch (Exception var6) {            if (this.logger.isWarnEnabled()) {                this.logger.warn("Failure while trying to resolve exception [" + ex.getClass().getName() + "]", var6);            }        }        return null;    }

5. 自定义异常解析器

自定义异常解析器需要满足以下:

  • 实现 HandlerExceptionResolver 接口并注册到容器中(@Component)

  • 在自定义解析器中实现 resolveException 方法,方法内可通过 sendError 方法返回错误信息并返回一空视图,交给底层将错误信息解析拼接为最终页面

  • 可以通过 @Order 注释调整自定义异常解析器的优先级,value越小优先级越高

自定义异常解析器示例代码:

import javax.servlet.http.HttpServletResponse;import java.io.IOException;@Order(value = Ordered.HIGHEST_PRECEDENCE) // 优先级数字越小,优先级越高@Component // 注册到容器中public class CustomerHandlerResolver implements HandlerExceptionResolver {    @Override    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {        try {            httpServletResponse.sendError(511, "我不喜欢的错误");        } catch (IOException e1){            e1.printStackTrace();        }        return new ModelAndView();    }}

自定义异常处理器被加入(未调整优先级时,默认加到最后):

SpringBoot如何自定义错误处理逻辑

6. ErrorViewResolver实现自定义处理异常

交由ErrorViewResolver的情况 :

情况一: response.sendError ,error 请求转给 Controller

情况二: 判断异常请求无人处理,Tomcat 底层 response.sendError

ErrorViewResolver处理方法:

BasicErrorController 得到要去的地址后由 ErrorViewResolver 解析,解析规则为拼接状态码等信息

&mdash;&mdash; 即 ErrorViewResolver 是最后的异常处理, 没人处理的异常,被它处理

到此,相信大家对“SpringBoot如何自定义错误处理逻辑”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: SpringBoot如何自定义错误处理逻辑

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot如何自定义错误处理逻辑
    本篇内容主要讲解“SpringBoot如何自定义错误处理逻辑”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot如何自定义错误处理逻辑”吧!1. 自定义错误页面将自定义错误页面放在...
    99+
    2023-07-04
  • SpringBoot自定义错误处理逻辑详解
    目录1. 自定义错误页面2. @ControllerAdvice+@ExceptionHandler3. 使用@ResponseStatus处理自定义异常4. 框架底层异常5. 自定...
    99+
    2022-11-13
    SpringBoot错误处理逻辑 SpringBoot错误处理
  • SpringBoot Security如何自定义异常处理
    这篇文章主要为大家展示了“SpringBoot Security如何自定义异常处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot Security如何自定...
    99+
    2023-06-22
  • 如何在 Go 和 Laravel 中实现自定义重定向逻辑?
    随着互联网的发展,网站的重定向功能越来越重要。在很多情况下,我们需要在网站上进行重定向操作,例如我们要将用户从一个页面重定向到另一个页面,或者将用户从一个域名重定向到另一个域名。在本文中,我们将讨论如何在 Go 和 Laravel 中实现自...
    99+
    2023-08-03
    laravel 打包 重定向
  • 基于spring-security 401 403错误自定义处理方案
    spring-security 401 403错误自定义处理 为了返回给前端统一的数据格式, 一般所有的数据都会以类似下面的方式返回: public class APIResul...
    99+
    2022-11-12
  • 一文吃透Spring Cloud gateway自定义错误处理Handler
    目录正文AbstractErrorWebExceptionHandlerisDisconnectedClientError方法isDisconnectedClientErrorMes...
    99+
    2023-03-01
    Spring Cloud gateway Handler Spring Cloud gateway 错误处理
  • shiro与spring security用自定义异常处理401错误
    目录shiro与spring security自定义异常处理401背景解决方案SpringBoot整合Shiro自定义filter报错No SecurityManager acces...
    99+
    2022-11-12
  • Spring Cloud gateway自定义错误处理Handler怎么实现
    本文小编为大家详细介绍“Spring Cloud gateway自定义错误处理Handler怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Cloud gateway自定义错误处...
    99+
    2023-07-05
  • Laravel如何自定义500错误页面
    这篇文章主要介绍了Laravel如何自定义500错误页面的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Laravel如何自定义500错误页面文章都会有所收获,下面我们一起来看看吧。Laravel 5.1中500...
    99+
    2023-07-04
  • Springboot项目中如何实现异常处理自定义
    这期内容当中小编将会给大家带来有关Springboot项目中如何实现异常处理自定义,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景Springboot 默认把异常的处理集中到一个ModelAndView...
    99+
    2023-05-31
    springboot 异常处理 目中
  • 如何在S/4HANA里创建Custom Business object并实现自定义逻辑
    如何在S/4HANA里创建Custom Business object并实现自定义逻辑,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用分配了包含有Business Cat...
    99+
    2023-06-03
  • 如何自定义jsp中的错误页面
    这篇文章主要介绍“如何自定义jsp中的错误页面”,在日常操作中,相信很多人在如何自定义jsp中的错误页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何自定义jsp中的错误页面”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-03
  • 如何在uniapp中自定义错误页面
    随着移动互联网的蓬勃发展,手机APP已经成为了人们日常生活的必需品。为了满足用户的需求,APP开发变得越来越繁琐和复杂。像uniapp这样的跨平台开发框架,为开发者提供了更便捷的开发方式。但在使用过程中,我们不可避免地会遇到一些错误或异常情...
    99+
    2023-05-14
  • shiro与spring security怎么用自定义异常处理401错误
    这篇文章主要介绍shiro与spring security怎么用自定义异常处理401错误,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!shiro与spring security自定义异常处理401背景现在是...
    99+
    2023-06-21
  • 如何理解Spring自定义属性编辑器
    如何理解Spring自定义属性编辑器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Spring 自定义属性编辑器Spring DI注入的时候可以把普通属性注入进来,但是像D...
    99+
    2023-06-17
  • web中如何设置自定义503错误页面
    这篇文章将为大家详细讲解有关web中如何设置自定义503错误页面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、什么是503状态码? 503 Service Unavailable是指由于临时的服务器维...
    99+
    2023-06-12
  • springboot如何实现全局异常处理及自定义异常类
    这篇文章主要介绍springboot如何实现全局异常处理及自定义异常类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!全局异常处理及自定义异常类全局异常处理定义一个处理类,使用@ControllerAdvice注解。@...
    99+
    2023-06-29
  • 基于spring-security出现401 403错误自定义处理的示例分析
    这篇文章将为大家详细讲解有关基于spring-security出现401 403错误自定义处理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。spring-security 401 403错误自定...
    99+
    2023-06-20
  • ORACLE中如何自定义系统验证的错误信息
    这篇文章将为大家详细讲解有关ORACLE中如何自定义系统验证的错误信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在ADF应用中,生成的EO都会自动生成部分约束,如必填...
    99+
    2022-10-19
  • laravel中如何用dingo API返回自定义错误信息
    本篇内容主要讲解“laravel中如何用dingo API返回自定义错误信息”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel中如何用dingo API返回自定义错误信息”吧!lara...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作