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中默认的异常处理能携带的信息太少,有时我们需要根据自己的需要对异常进行响应
就需要我们的自定义异常处理
-
先创建一个异常处理类
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; } }
-
使用
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");
}
}