不积跬步,无以至千里;不积小流,无以成江海。大家好,我是闲鹤,公众号:xxh_zone,十多年开发、架构经验,先后在华为、迅雷服役过,也在高校从事教学3年;目前已创业了7年多,主要从事物联网/车联网相关领域和业务。喜欢交友、骑行、写毛笔字、弹吉他、折腾硬件和写代码。
导读
这是一系列关于 SpringBoot Web框架实战 的教程,从项目的创建,到一个完整的 web 框架(包括异常处理、拦截器、context 上下文等);从0开始,到一个可以直接运用在生产环境中的web框架,所有源码均开源。
正文
访问 SpringBoot server 时,当内部出现异常的话,SpringBoot 有一套自己的异常处理,同时向页面输出相关内容。
比如,当我们访问一个不存在的路由时,Spring Boot 默认会返回:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Fri Oct 14 16:51:35 CST 2022
There was an unexpected error (type=Not Found, status=404).
出于各种考量,当 server 出现异常时,我们希望是输出我们自定义的内容,此时我们只需要创建我们自己的异常处理。
1. 新建类
package org.example.controller;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
@ControllerAdvice
public class DefExceptionHandle {
@ExceptionHandler(value = RuntimeException.class)
@ResponseBody
public String exceptionHandler(HttpServletRequest req, RuntimeException e) {
return "运行时异常: " + e.getMessage();
}
/**
* 处理空指针的异常
*
*/
@ExceptionHandler(value = NullPointerException.class)
@ResponseBody
public String exceptionHandler(HttpServletRequest req, NullPointerException e) {
return "处理空指针的异常: " + e.getMessage();
}
/**
* 处理请求方法不支持的异常
*
*/
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
@ResponseBody
public String exceptionHandler(HttpServletRequest req, HttpRequestMethodNotSupportedException e) {
return "理请求方法不支持的异常: " + e.getMessage();
}
/**
* 处理其他异常
*
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public String exceptionHandler(HttpServletRequest req, Exception e) {
return "处理其他异常: " + e.getMessage();
}
@ExceptionHandler(value = ArithmeticException.class)
@ResponseBody
public String exceptionHandler(HttpServletRequest req, ArithmeticException e) {
return "运算异常: " + e.getMessage();
}
}
2. 修改配置文件
spring:
mvc:
throw-exception-if-no-handler-found: true
web:
resources:
add-mappings: false
操作以上两部分,就可以自定义异常的输出了。
系列文章
【SpringBoot Web框架实战教程】01 使用 pom 方式创建 SpringBoot 第一个项目
【SpringBoot Web框架实战教程】02 SpringBoot 返回 JSON
【SpringBoot Web框架实战教程】03 SpingBoot 获取 http 请求参数
【SpringBoot Web框架实战教程】04 SpringBoot 规范统一输出 json
【SpringBoot Web框架实战教程】05 Spring Boot 使用 JdbcTemplate 操作数据库
【SpringBoot Web框架实战教程】06 Spring Boot 整合 Druid
【SpringBoot Web框架实战教程】07 SpringBoot 整合 MyBatis
近期文章
# 车联网
【自动化运维】不要相信人,把所有的东西都交给机器去处理
从华为无线网络框架说Dispatch服务
百万级物联网框架设计
高并发服务器之泄峰
# 硬件
stm32驱动直流电机实现启动/加速/减速/倒车/停车等功能
stm32 定时器输出比较(OC)与PWM的理解和应用
stm32 定时器中断
STM32 外部中断的理解