SpringBoot(6) SpringBoot配置全局异常

1、全局异常

@ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody
//捕获全局异常,处理所有不可知的异常
@ExceptionHandler(value=Exception.class)

 1 @RestControllerAdvice
 2 public class CustomExtHandler {
 3
 4     private static final Logger LOG = LoggerFactory.getLogger(CustomExtHandler.class);
 5
 6
 7     //捕获全局异常,处理所有不可知的异常
 8     @ExceptionHandler(value=Exception.class)
 9     Object handleException(Exception e,HttpServletRequest request){
10         LOG.error("url {}, msg {}",request.getRequestURL(), e.getMessage());
11         Map<String, Object> map = new HashMap<>();
12             map.put("code", 100);
13             map.put("msg", e.getMessage());
14             map.put("url", request.getRequestURL());
15             return map;
16     }
17
18 }

2、自定义异常类型

自定义异常类型MyException

 1 /*
 2  * 功能描述: 建立自定义异常类 -- 继承运行异常最高类
 3  *
 4  * */
 5
 6 public class MyException extends RuntimeException{
 7
 8     public MyException(String code, String msg){
 9         this.code = code;
10         this.msg = msg;
11     }
12
13     private String code;
14     private String msg;
15
16     public String getCode() {
17         return code;
18     }
19     public void setCode(String code) {
20         this.code = code;
21     }
22
23     public String getMsg() {
24         return msg;
25     }
26
27     public void setMsg(String msg) {
28         this.msg = msg;
29     }
30
31 }

修改CustomExtHandler

 1 @RestControllerAdvice
 2 public class CustomExtHandler {
 3
 4     private static final Logger LOG = LoggerFactory.getLogger(CustomExtHandler.class);
 5
 6
 7     //捕获全局异常,处理所有不可知的异常
 8     @ExceptionHandler(value=Exception.class)
 9     Object handleException(Exception e,HttpServletRequest request){
10         LOG.error("url {}, msg {}",request.getRequestURL(), e.getMessage());
11         Map<String, Object> map = new HashMap<>();
12             map.put("code", 100);
13             map.put("msg", e.getMessage());
14             map.put("url", request.getRequestURL());
15             return map;
16     }
17
18     /**
19      * 功能描述: 处理自定义异常类
20      * @return
21      *
22      */
23     @ExceptionHandler(value = MyException.class)
24     Object handleMyException(MyException e, HttpServletRequest request){
25         //进行页面跳转
26 //        ModelAndView modelAndView = new ModelAndView();
27 //        modelAndView.setViewName("error.html");
28 //        modelAndView.addObject("msg", e.getMessage());
29 //        return modelAndView;
30
31         //f返回json数据
32         Map<String, Object> map = new HashMap<>();
33         map.put("code", e.getCode());
34         map.put("msg", e.getMessage());
35         map.put("url", request.getRequestURL());
36         return map;
37     }
38 }

模拟一个异常实现页面跳转

1 /**
2  * 功能描述: 模拟自定义异常
3  * @return
4  */
5 @RequestMapping(value = "/api/v1/myext")
6 public Object myext() {
7     throw new MyException("500", "my ext异常");
8 }
9     

最后梳理顺序:

  首先,建立自定义异常类 MyException,继承于RuntimeException。如果出异常,在@RestControllerAdvice注释下的CustomExtHandler里面捕获,根据异常种类进行处理。

异常处理的官网地址: https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-error-handling

原文地址:https://www.cnblogs.com/platycoden/p/9799900.html

时间: 2024-11-05 21:49:07

SpringBoot(6) SpringBoot配置全局异常的相关文章

springBoot(5)---单元测试,全局异常

单元测试,全局异常 一.单元测试 1.基础版 1.引入相关依赖 <!--springboot程序测试依赖,如果是自动创建项目默认添加--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </depen

SpringBoot配置全局异常捕获

1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.java捕获到异常以ajax形式返回 MyExceptionHandler.java捕获到异常以页面形式返回 ajaxerror.html这个是测试返回ajax异常的页面 error.html以页面形式返回的异常到这个页面 1.1 页面跳转形式 1.1.1 配置 MyExceptionHandler.

【spring】-- springboot配置全局异常处理器

一.为什么要使用全局异常处理器? 什么是全局异常处理器? 就是把错误异常统一处理的方法. 应用场景: 1.当你使用jsr303参数校验器,如果参数校验不通过会抛异常,而且无法使用try-catch语句直接捕获,这时可以使用全局异常处理器来捕捉该异常. 2.当你自定义了一个异常类,可以在全局异常处理器中来捕捉该异常.(当然也可以直接在抛出异常处直接捕获,但是这样需要在每一个抛出的地方都写一次捕获代码,看起来不够美观且复用性不强,其他异常同理). 所有异常都可以在全局异常处理器中捕获进行统一处理 二

springboot配置全局异常

第一步 controller中 package cn.itcast.springboot.controller; import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody; import cn.itcast.spri

Eclipse搭建springboot项目(六)全局异常

知识点: 1.SpringBoot2.x服务端异常和SpringBoot配置全局异常 1).默认异常测试 int i = 1/0,不友好 2).异常注解介绍 @ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody //捕获全局异常,处理所有不可知的异常 @ExceptionHandler(value=Exception.class) 2.SpringBoot2.x配置全局异常返回自定义异常和错误页面跳转

springmvc处理局部异常和全局异常

springmvc通过HandlerExceptionResolver(是一个接口,在spring-webmvc依赖下)处理程序异常,包括处理器异常.数据绑定异常以及处理器执行时发生的异常.HandlerExceptionResolver仅有一个接口方法,如下 当发生异常时,springmvc会调用resolverException()方法,并转到ModelAndView对应的视图中,作为一个异常处理报告页面反馈给用户. 局部异常处理 局部异常处理仅能处理指定controller中的异常,使用@

springboot捕获全局异常和配置多数据源

目录 配置多数据源 写两个数据源的配置类. @(springboot捕获全局异常和配置多数据源) 捕获全局异常是在项目运行期间如果调用的某一个方法出现了运行时异常,则会捕获,并且给出回馈. 首先需要建一个包,包里新建一个捕获异常类GlobalExceptionHandler.前提是springboot的启动类的扫描注解ComponentScan()要扫描到. /** * 用于捕获全局异常 */ @ControllerAdvice//控制器切面 public class GlobalExcepti

springboot编程之全局异常捕获

springboot编程之全局异常捕获 1.创建GlobalExceptionHandler.java,在类上注解@ControllerAdvice, 在方法上注解@ExceptionHandler(value = Exception.class),Exception.class表示拦截所有的异常信息 package com.imooc.web.controller; import com.imooc.exception.UserNotExistException; import org.spr

SpringBoot:如何优雅地处理全局异常?

SpringBoot:如何优雅地处理全局异常? 之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Controller下面,满屏幕的try{}catch,看着一点都不优雅,一点都不符合×××的气质,憋了这么久,×××今天终于决定对所有异常实施统一处理的方案. 开发准备 JDK8.正常的springboot项目 代码编写 通用异常处理 其实Spring系列的项目