springBoot异常统一处理

采用@ControllerAdvice注解和@ExceptionHandler注解,可以对异常进行统一处理。

1.结构图:

2.pom.xml文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>com.didispace</groupId>
  7. <artifactId>Chapter3-1-6</artifactId>
  8. <version>1.0.0</version>
  9. <packaging>jar</packaging>
  10.  
  11. <name>Chapter3-1-6</name>
  12. <description>Spring Boot</description>
  13.  
  14. <parent>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-parent</artifactId>
  17. <version>1.3.2.RELEASE</version>
  18. <relativePath/> <!-- lookup parent from repository -->
  19. </parent>
  20.  
  21. <properties>
  22. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23. <java.version>1.8</java.version>
  24. </properties>
  25.  
  26. <dependencies>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter</artifactId>
  30. </dependency>
  31.  
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-test</artifactId>
  35. <scope>test</scope>
  36. </dependency>
  37.  
  38. <dependency>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-starter-web</artifactId>
  41. </dependency>
  42.  
  43. <dependency>
  44. <groupId>org.springframework.boot</groupId>
  45. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  46. </dependency>
  47.  
  48. </dependencies>
  49.  
  50. <build>
  51. <plugins>
  52. <plugin>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-maven-plugin</artifactId>
  55. <configuration>
  56. <fork>true</fork>
  57. </configuration>
  58. </plugin>
  59. </plugins>
  60. </build>
  61.  
  62. </project>

3.配置文件:

  1. server.port=9000

4.index.html

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.w3.org/1999/xhtml">
  3. <head lang="en">
  4. <meta charset="UTF-8" />
  5. <title></title>
  6. </head>
  7. <body>
  8. <h1 th:text="${host}">Hello World</h1>
  9. </body>
  10. </html>

5.error.html

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.w3.org/1999/xhtml">
  3. <head lang="en">
  4. <meta charset="UTF-8" />
  5. <title>统一异常处理</title>
  6. </head>
  7. <body>
  8. <h1>Error Handler</h1>
  9. <div th:text="${url}"></div>
  10. <div th:text="${exception.message}"></div>
  11. </body>
  12. </html>

6.ErrorInfo

  1. package com.didispace.dto;
  2.  
  3. public class ErrorInfo<T> {
  4.  
  5. public static final Integer OK = 0;
  6. public static final Integer ERROR = 100;
  7.  
  8. private Integer code;
  9. private String message;
  10. private String url;
  11. private T data;
  12.  
  13. public String getUrl() {
  14. return url;
  15. }
  16.  
  17. public void setUrl(String url) {
  18. this.url = url;
  19. }
  20.  
  21. public static Integer getOK() {
  22. return OK;
  23. }
  24.  
  25. public static Integer getERROR() {
  26. return ERROR;
  27. }
  28.  
  29. public Integer getCode() {
  30. return code;
  31. }
  32.  
  33. public void setCode(Integer code) {
  34. this.code = code;
  35. }
  36.  
  37. public String getMessage() {
  38. return message;
  39. }
  40.  
  41. public void setMessage(String message) {
  42. this.message = message;
  43. }
  44.  
  45. public T getData() {
  46. return data;
  47. }
  48.  
  49. public void setData(T data) {
  50. this.data = data;
  51. }
  52.  
  53. }

7.myExecption:

  1. package com.didispace.exception;
  2.  
  3. /**
  4. * @author 程序猿DD
  5. * @version 1.0.0
  6. * @date 16/5/2 上午10:50.
  7. * @blog http://blog.didispace.com
  8. */
  9. public class MyException extends Exception {
  10.  
  11. public MyException(String message) {
  12. super(message);
  13. }
  14.  
  15. }

8.GlobalExceptionHandler:

  1. package com.didispace.exception;
  2.  
  3. import com.didispace.dto.ErrorInfo;
  4. import org.springframework.web.bind.annotation.ControllerAdvice;
  5. import org.springframework.web.bind.annotation.ExceptionHandler;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import org.springframework.web.servlet.ModelAndView;
  8.  
  9. import javax.servlet.http.HttpServletRequest;
  10.  
  11. @ControllerAdvice
  12. public class GlobalExceptionHandler {
  13.  
  14. @ExceptionHandler(value = Exception.class)
  15. public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
  16. ModelAndView mav = new ModelAndView();
  17. mav.addObject("exception", e);
  18. mav.addObject("url", req.getRequestURL());
  19. mav.setViewName("error");
  20. return mav;
  21. }
  22.  
  23. @ExceptionHandler(value = MyException.class)
  24. @ResponseBody
  25. public ErrorInfo<String> jsonErrorHandler(HttpServletRequest req, MyException e) throws Exception {
  26. ErrorInfo<String> r = new ErrorInfo<>();
  27. r.setMessage(e.getMessage());
  28. r.setCode(ErrorInfo.ERROR);
  29. r.setData("Some Data");
  30. r.setUrl(req.getRequestURL().toString());
  31. return r;
  32. }
  33.  
  34. }

9.启动项:

  1. package com.didispace;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5.  
  6. /**
  7. *
  8. * @author 程序猿DD
  9. * @version 1.0.0
  10. * @blog http://blog.didispace.com
  11. *
  12. */
  13. @SpringBootApplication
  14. public class Application {
  15.  
  16. public static void main(String[] args) {
  17.  
  18. SpringApplication.run(Application.class, args);
  19.  
  20. }
  21.  
  22. }

10.controller:

  1. package com.didispace.web;
  2.  
  3. import com.didispace.exception.MyException;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.ModelMap;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8.  
  9. /**
  10. *
  11. * @author 程序猿DD
  12. * @version 1.0.0
  13. * @blog http://blog.didispace.com
  14. *
  15. */
  16. @Controller
  17. public class HelloController {
  18.  
  19. @RequestMapping("/hello")
  20. public String hello() throws Exception {
  21. throw new Exception("发生错误");
  22. }
  23.  
  24. @RequestMapping("/json")
  25. public String json() throws MyException {
  26. throw new MyException("发生错误2");
  27. }
  28.  
  29. @RequestMapping("/")
  30. public String index(ModelMap map) {
  31. map.addAttribute("host", "http://blog.didispace.com");
  32. return "index";
  33. }
  34.  
  35. }

11.访问url:

http://localhost:9000/hello               

http://localhost:9000/json               

http://localhost:9000/                     

springBoot异常统一处理的更多相关文章

  1. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  2. Springboot项目全局异常统一处理

    转自https://blog.csdn.net/hao_kkkkk/article/details/80538955 最近在做项目时需要对异常进行全局统一处理,主要是一些分类入库以及记录日志等,因为项 ...

  3. SpringBoot异常处理统一封装我来做-使用篇

    SpringBoot异常处理统一封装我来做-使用篇 简介 重复功能我来写.在 SpringBoot 项目里都有全局异常处理以及返回包装等,返回前端是带上succ.code.msg.data等字段.单个 ...

  4. springboot返回统一接口与统一异常处理

    springboot返回统一接口与统一异常处理 编写人员:yls 编写时间:2019-9-19 0001-springboot返回统一接口与统一异常处理 简介 创建统一的返回格式 Result 封装统 ...

  5. Springboot项目统一异常处理

    Springboot项目统一异常处理 一.接口返回值封装 1. 定义Result对象,作为通用返回结果封装 2. 定义CodeMsg对象,作为通用状态码和消息封装 二.定义全局异常类 三.定义异常处理 ...

  6. 深度分析:SpringBoot异常捕获与封装处理,看完你学会了吗?

    SpringBoot异常处理 简介 ​ 日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一般都是利用try ,catch的方式处理异常或者throw,throws的方式抛出异常不管.这种 ...

  7. SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!

    大家好,我是飘渺. 今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常. 首先我们来看看为什么要返回统一的标准格式? 为什么要对Sp ...

  8. SpringBoot 如何统一后端返回格式

    在前后端分离的项目中后端返回的格式一定要友好,不然会对前端的开发人员带来很多的工作量.那么SpringBoot如何做到统一的后端返回格式呢?今天我们一起来看看. 为什么要对SpringBoot返回统一 ...

  9. Ext.net 异常统一管理,铥掉可恶的 Request Failure

    Ext.net 异常统一管理,铥掉可恶的 Request Failure 看着这样的框框是不是很不爽 灭他.也不难.. .如果全部页面都有继承一个自定义的父类 ..那整个项目代码量就只有几行了.. 单 ...

随机推荐

  1. 【Kubernetes 系列三】Kubernetes 学习文档推荐

    标题 地址 备注 Kubernetes 官方文档 https://kubernetes.io/docs 英文文档,全面 Kubernetes Handbook ttps://jimmysong.io/ ...

  2. hadoop hdfs 分布式存储

    1.克隆前的工作 1.配置好网络nat  需要设置静态ip并能通过主机上网 ssh   和  rsync  是必须下载的 2.yum install vim wget  rsync  ssh   并配 ...

  3. 【0725 | Day 1】计算机编程/计算机组成原理/计算机操作系统

    什么是编程 编程语言:人与计算机交流的手段 编程:通过编程语言编写文件 学习编程的目的:让计算机代替人力,为我们服务 计算机组成原理 计算机由五大部分组成:控制器.运算器.存储器.输入设备.输出设备. ...

  4. PDF.js 详情解说

    pdf.js资源下载 点我下载 自定义默认加载的pdf资源 在web/view.js中我们可以通过DEFAULT_URL设置默认加载的pdf.通过上面代码我们也可以看出来可以通过后缀名来指定加载的pd ...

  5. SSM框架的详细解说

    文章转载自:http://blog.csdn.net/zhshulin 使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就 ...

  6. SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)

    [前言] 本系列主要讲述sonarqube的安装部署以及如何集成jenkins自动化分析.netcore项目.目录如下: SonarQube系列一.Linux安装与部署 SonarQube系列二.分析 ...

  7. Rootkit与后门隐藏技术

    目录 简介 linux虚拟文件系统VFS rootkit的功能 隐藏文件 基本方法 高级方法 系统调用流程 hook sys_getdents sys_getdents的调用树 最底层的方法 隐藏进程 ...

  8. 云片RocketMQ实战:Stargate的前世今生

    RocketMQ消息队列,专业消息中间件,既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积.高吞吐.可靠重试等特性,是应对企业业务峰值时刻必备的技术. 云片由于 ...

  9. 你是否真的了解全局解析锁(GIL)

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  10. asp.net core系列 71 Web架构分层指南

    一.概述 本章Web架构分层指南,参考了“Microsoft应用程序体系结构指南”(该书是在2009年出版的,当时出版是为了帮助开发人员和架构师更快速,更低风险地使用Microsoft平台和.NET ...