第二十三章 springboot + 全局异常处理

一、单个controller范围的异常处理

 1 package com.xxx.secondboot.web;
 2
 3 import org.springframework.web.bind.annotation.ExceptionHandler;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 import org.springframework.web.bind.annotation.RestController;
 7
 8 import com.xxx.secondboot.exception.MyExceptionResponse;
 9
10 import io.swagger.annotations.Api;
11
12 @Api("测试controllerAdvice和全局异常处理")
13 @RestController
14 @RequestMapping("/advice1")
15 public class AdviceController {
16
17     @RequestMapping(value = "/test1", method = RequestMethod.GET)
18     public String test1() {
19         throw new RuntimeException("advice1 - exception1");
20     }
21
22     @RequestMapping(value = "/test2", method = RequestMethod.GET)
23     public String test2() {
24         throw new RuntimeException("advice1 - exception2");
25     }
26
27     @ExceptionHandler(RuntimeException.class)
28     public MyExceptionResponse exceptionHandler() {
29         MyExceptionResponse resp = new MyExceptionResponse();
30         resp.setCode(300);
31         resp.setMsg("exception-Handler");
32         return resp;
33     }
34
35 }

说明:

  • 在controller中加入被@ExceptionHandler修饰的类即可(在该注解中指定该方法需要处理的那些异常类)
  • 该异常处理方法只在当前的controller中起作用

二、全部controller范围内起作用的异常处理(全局异常处理)

1、全局异常处理类

 1 package com.xxx.secondboot.web;
 2
 3 import javax.servlet.http.HttpServletResponse;
 4
 5 import org.springframework.web.bind.annotation.ControllerAdvice;
 6 import org.springframework.web.bind.annotation.ExceptionHandler;
 7 import org.springframework.web.bind.annotation.ResponseBody;
 8 import org.springframework.web.bind.annotation.RestController;
 9
10 import com.xxx.secondboot.exception.MyExceptionResponse;
11 import com.xxx.secondboot.exception.MyRuntimeException;
12
13 //@ControllerAdvice(annotations=RestController.class)
14 //@ControllerAdvice(basePackages={"com.xxx","com.ooo"})
15 @ControllerAdvice
16 public class GlobalExceptionHandler {
17     @ExceptionHandler(RuntimeException.class)
18     //    @ExceptionHandler(value={RuntimeException.class,MyRuntimeException.class})
19     //    @ExceptionHandler//处理所有异常
20     @ResponseBody //在返回自定义相应类的情况下必须有,这是@ControllerAdvice注解的规定
21     public MyExceptionResponse exceptionHandler(RuntimeException e, HttpServletResponse response) {
22         MyExceptionResponse resp = new MyExceptionResponse();
23         resp.setCode(300);
24         resp.setMsg("exception-Handler");
25         //        response.setStatus(600);
26         return resp;
27     }
28 }

说明:

  • @ControllerAdvice是controller的一个辅助类,最常用的就是作为全局异常处理的切面类
  • @ControllerAdvice可以指定扫描范围
  • @ControllerAdvice约定了几种可行的返回值,如果是直接返回model类的话,需要使用@ResponseBody进行json转换

2、controller

 1 package com.xxx.secondboot.web;
 2
 3 import org.springframework.web.bind.annotation.RequestMapping;
 4 import org.springframework.web.bind.annotation.RequestMethod;
 5 import org.springframework.web.bind.annotation.RestController;
 6
 7 import io.swagger.annotations.Api;
 8
 9 @Api("测试controllerAdvice和全局异常处理")
10 @RestController
11 @RequestMapping("/advice1")
12 public class AdviceController {
13
14     @RequestMapping(value = "/test1", method = RequestMethod.GET)
15     public String test1() {
16         throw new RuntimeException("advice1 - exception1");
17     }
18
19     @RequestMapping(value = "/test2", method = RequestMethod.GET)
20     public String test2() {
21         throw new RuntimeException("advice1 - exception2");
22     }
23
24     //    @ExceptionHandler(RuntimeException.class)
25     //    public MyExceptionResponse exceptionHandler() {
26     //        MyExceptionResponse resp = new MyExceptionResponse();
27     //        resp.setCode(300);
28     //        resp.setMsg("exception-Handler");
29     //        return resp;
30     //    }
31
32 }
时间: 2024-10-09 01:53:44

第二十三章 springboot + 全局异常处理的相关文章

扣响C#之门笔记--第二十三章

23.1 泛型的概念 (1)在普通集合中,元素均被看做是object类型,会有以下缺点(a)赋值时候将类型转为object,使用时候又将object转为对应的类型,在装箱和拆箱时候造成一定性能损失:(b)任何类型的数据都可以放进集合里面,不利于类型安全检查: static void Main(string[] args) { Queue q = new Queue(); q.Enqueue(10); q.Enqueue("wo"); // q.Enqueue(1); foreach (

Gradle 1.12用户指南翻译——第二十三章. Java 插件

其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,兼容

springboot 全局异常处理

springboot 全局异常处理 研究了半天springboot的全局异常处理,虽然还是需要再多整理一下,但是对于常见的404和500足以可以区分开,能够根据这两个异常分别处理 首先配置视图解析路径 spring.mvc.view.prefix=/WEB-INF/ spring.mvc.view.suffix=.jsp 针对500错误 创建单独的配置类,放在启动类同包或子包下 import org.springframework.web.bind.annotation.ControllerAd

第二十三章

曲则全,枉则正,洼则盈,敝则新,少则得,多则惑.是以圣人执一,为天下牧.不自视故彰:不自见故明:不自伐故有功:弗矜故能长.夫唯不争,故莫能与之争.古之所谓「曲则全」者,几语哉!诚全归之. 罗大伦道德经文字版-第二十三章1 暂时的隐忍会换来更多 各位朋友大家好,今天我们接着来聊<道德经>.我们今天聊到了第二十三章了,慢慢改变,这也说明改变已经很巨大了,我们一点点学.一点点提升,我与您一起往前走.其实我在讲<道德经>的过程中,我也在提升,我也在学习,我们一起来学习,三年之约,我们不见不

zbb20180921 springboot 全局异常处理 404 500

研究了半天springboot的全局异常处理,虽然还是需要再多整理一下,但是对于常见的404和500足以可以区分开,能够根据这两个异常分别处理 首先配置视图解析路径 spring.mvc.view.prefix=/WEB-INF/ spring.mvc.view.suffix=.jsp 针对500错误 创建单独的配置类,放在启动类同包或子包下 import org.springframework.web.bind.annotation.ControllerAdvice; import org.s

springboot全局异常处理

项目中遇到运行时异常,总不能每个异常处理都去添加try catch逻辑,甚至有的时候一个偶然条件发生而导致异常,而我们没有进行对应的处理则会直接给请求者返回未知的错误,这在正式的上线的项目中是不允许,所以我们来配置全局异常处理. 1.使用到的注解:@ControllerAdvice注解是用来配置控制器通知的,我们可以配置过滤拦截具体一种或者多种类型的注解,添加annotations属性即可,在类的上方我们配置了@ControllerAdvice的annotations属性值为RestContro

SpringBoot | 第二十三章:日志管理之整合篇

前言 在本系列<第四章:日志管理>中,由于工作中日志这块都是走默认配置,也没有深入了解过,因为部署过程中直接使用了linux中的输出重定向功能,如java -jar xx.jar > app.log 2>&1 &,直接输出到某个日志文件了.所以也就没有认真关心过默认的日志格式了.系列文章出来后,也看见有网友反馈说如何进行日志的相关配置,或者配置失效问题.本着负责的原则,本文就来详细介绍下SpringBoot中日志管理相关配置问题.也是最近熟悉了下,有不足之处,还望指

第二十三章、软件安装: RPM, SRPM 与 YUM 功能

SRPM 的使用 : rpmbuild 包含Source code 的 SRPM 新版的 rpm 已经将 RPM 与 SRPM 的命令分开了,SRPM 使用的是 rpmbuild 这个命令,而不是 rpm !如果你是 Red Hat 7.3 以前的用户,那么请使用 rpm 来替代 rpmbuild ! 利用默认值安装 SRPM 文件 (--rebuid/--recompile) --rebuild 这个选项会将后面的 SRPM 进行『编译』与『打包』的动作,最后会产生 RPM 的文件,但是产生的

C++程序设计原理与实践 第二十三章部分答案

1 #include <iostream> 2 #include <vector> 3 #include <string> 4 #include <list> 5 #include<fstream> 6 #include <set> 7 #include<algorithm> 8 #include<stdexcept> 9 #include <map> 10 #include<boost/re