SpringBoot自定义异常处理和自定义异常界面

SpringBoot异常处理

默认处理机制

SpringBoot默认有一套异常处理机制

比如我们常见的error界面

在这里插入图片描述

或者直接抛出异常时

在这里插入图片描述这些SpringBoot都是默认帮我们进行异常的处理的,但这种处理太单一,有时候我们需要自定义异常的处理.一般来说返回500是我们后端人员最不想看到的东西.我们这个时候就需要自定义异常处理
在SpringBoot中异常处理其实是有两种处理方式.如果请求的数据为text/html时,异常处理会将信息组装成页面返回.如果是通过客户端发的请求(请求数据不为text/html时)后端会将错误信息封装成json字符串进行返回

例如:
使用浏览器发送请求
在这里插入图片描述
使用Postman模拟客户端发送请求
在这里插入图片描述
返回的内容是有区别的

自定义错误页面

Springboot中自定义异常界面来代替springboot难看的错误页面

在resources文件夹下创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CX50xKcr-1620306569683)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210506202150147.png)]

还可以创建对应的404.500.405等页面.这时候如果再次通过浏览器发送请求时,就会将对应的状态界面返回

自定义异常处理

SpringBoot中默认的异常处理能携带的信息太少,有时我们需要根据自己的需要对异常进行响应

就需要我们的自定义异常处理

  1. 先创建一个异常处理类

    package com.imooc.web.controller;
    
    import com.imooc.exception.UserNotExistException;
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.ResponseStatus;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author 沈洋 邮箱:1845973183@qq.com
     * @create 2021/5/6-20:35
     **/
    
    //添加此注解的类,不会处理用户的请求,一旦有接口抛出了异常,这个处理类就会执行
    @ControllerAdvice
    public class ControllerExceptionHandler {
        
        //注解表示针对哪个异常进行处理(例如这里标注的UserNotExistException)
        //如果有接口抛出了UserNotExistException,这个方法就会进行处理,而抛出的其他异常则不会进行处理
        @ExceptionHandler(UserNotExistException.class)
        //表示这个方法返回的数据转成字符串返给前端
        @ResponseBody
        //设置响应状态码
        @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
        public Map<String,Object> handleUserNotExistException(UserNotExistException ex){	
            //设置要返回的数据
            Map<String,Object> result = new HashMap<>();
            result.put("id",ex.getId());
            result.put("message",ex.getMessage());
            return result;
        }
    }
    
  2. 使用

package com.imooc.web.controller;

import com.imooc.dto.User;
import com.imooc.exception.UserNotExistException;

/**
 * @author 沈洋 邮箱:1845973183@qq.com
 * @create 2021/5/5-10:51
 **/
@RestController
public class UserController {

    @GetMapping("/user/{id:\\d+}")
    public User getUserInfo(@PathVariable String id) throws Exception {
        throw new UserNotExistException("id");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shenyang1026

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

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

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

打赏作者

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

抵扣说明:

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

余额充值