vlambda博客
学习文章列表

峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本

2020
峰哥说技术

《峰哥说专栏》于2月26日正式开启,不管你是学生、还是职场人亦或者仅仅是喜欢互联网技术的人,都可以关注此专栏,大咖为您解说技术,也同样欢迎您来与我们一同探讨,用代码,改变世界,我们是认真的!


今日份主题

峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本
Spring Boot ControllerAdvice处理全局异常


ControllerAdvice是Controller的增强版,主要用于全局数据的处理,一般和@ExceptionHandler、@InitBinder、@ModelAttribute搭配使用。它并不属于Spring Boot的内容,而是Spring框架中本身就有该注解。一般来说@ExceptionHandler和该注解用在全局异常处理的时候用的比较多。所以我们这里重点讲解该注解处理全局异常。后面的两个用法大家可以到官网去查看,这里不做介绍。


需求说明:我们使用文件上传案例,在application.properties中配置单个文件的上传大小的现在为1kb。当超过1kb图片的时候,抛出异常,我们进行全局异常的处理。

1
构建异常,在application.properties中进行配置。

spring.servlet.multipart.max-file-size=1KB


2
测试,在http://localhost:8081/index.html,选择1个大于1kb的图片。


峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本


峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本


这里的异常类型是FileSizeLimitExceededException。它含义是文件的大小超过极限异常。


现在采用ControllerAdvice来处理。这里讲解两种方式,一种是响应异常信息文本。第二种返回到视图或者说ModelAndView。

A
直接响应文本

1
创建exception包,编写一个FileUploadException类

@ControllerAdvice
public class MyCustomException {
    @ExceptionHandler(MaxUploadSizeExceededException.class)
    public void FileUploadException(MaxUploadSizeExceededException e, HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.write("上传文件大小超过限制");
        writer.flush();
        writer.close();
    }
}


2
测试,下面是结果:


峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本


@ControllerAdvice添加到类后,当系统启动的时候会将对于的类扫描到Spring容器,MaxUploadSizeExceededException会处理上传的异常。当我们需要处理所有异常的时候可以将异常的类型换成Exception就可以了。


返回值可以有,也可以没有,可以是JSON,也可以是ModelAndView。也可以是其他类型,这都很灵活。


B
返回ModelAndView

我们采用Thymeleaf作为视图组件,然后返回ModelAndView。


步骤如下

1
添加thymeleanf依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>


2
在templates下面创建myerror.html错误处理视图。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h4 th:text="${error}"></h4>
</body>
</html>


3

编写MyCustomException,并编写代码。

@ControllerAdvice
public class MyCustomException {
    @ExceptionHandler(MaxUploadSizeExceededException.class)
    public ModelAndView FileUploadException(MaxUploadSizeExceededException e) throws IOException {
        ModelAndView mv=new ModelAndView();
        mv.addObject("error","上传的文件超过限制大小,请注意");
        mv.setViewName("myerror");
        return mv;
    }
}


4
测试如下:


峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本


经过峰哥耐心的解说,估计大家对这个问题一定有了全新的认识。大家在平时的学习中如果有类似的疑问,都可以提出来,在后台留言即可。峰哥看到后,觉得有价值,会以文章的形式专门说明。


峰哥说技术专栏:

条件注解Spring Boot自动配置的基石

手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理

Sring Boot整合视图之Thymeleaf

Sring Boot整合视图之FreeMarkerSpring Boot整合FreeMarker视图

...

如果需要查看,后台留言回复“1”即可获取代码详情。


峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本
今日份赠送资源
峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本


峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本


想获取更多请加小课领取哟!





确认过眼神
你是我爱的人
学习课程   从加小课开始   
峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本
峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本
领取资源

=END=


 


往期精彩回顾:


想要了解Java软件开发、web前端、UI设计、大数据及人工智能等行业前景、就业薪资、课程学习等问题,可私信小Ke或是后台留言,小Ke看到会第一时间回复!点击  阅读原文  可进入官网,欢迎留言哦!