【SpringBoot Web框架实战教程】08 SpringBoot 自定义异常处理输出

不积跬步,无以至千里;不积小流,无以成江海。大家好,我是闲鹤,公众号: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 外部中断的理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiongxianhe

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值