Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

SpringBoot自定义错误处理

我们经常因为各种各样的问题而导致的错误,错误有很多处理的办法,有的是直接使用SpringBoot错误页面路径规定的常见的错误状态码页面路径,一部分是自定义错误处理,我们今天就来讲解下这两种方法

受限我们来模拟一个错误:

@RestController
public class siteController {

    @GetMapping(value = "/")
    public String hello(){
        throw new RuntimeException("错误页面显示");
    }
}

通过浏览路径,我们发现这么现实是否不好看,那怎么办办呢?我们是不是应该自定义一个错误页面,往下继续看!

1、使用SpringBoot默认的错误页面定义

src\main\resources\resources\error\500.html

上边路径是SpringBoot默认帮助我们定义好的页面链接,当我们使用;浏览器打开的时候,有错误,会对应调取这个目录的错误页面,大家可以试试

2、自定义错误,这个是我们的重头戏

还是上边代码,刚才我们抛出了RuntimeException,我们自定义错误页面自然而然也应该集成这个错误类,下边看代码!

public class UserCustException extends RuntimeException {
  /** * 错误信息是不是应该包含错误路径,错误信息呢?看代码 */
  private String url;

  private String msg;

  public UserCustException(String url, String msg) {
    super("msg");
    this.url = url;
  }

  public String getUrl() {
    return url;
  }

  public String getMsg() {
    return msg;
  }
}

写完自定义类,但是SpringBoot并不知道你写的是一个什么,我们需要@ControllerAdvice来处理异常

@ControllerAdvice
public class ControllerExceptionHandler {
  /** 指定异常使用那个类处理 */
  @ExceptionHandler(UserCustException.class)
  /** 表示该方法的返回结果直接写入 HTTP response body 中 */
  @ResponseBody
  /** 这里作用就是改变服务器响应的状态码 ,比如一个本是200的请求可以通过@ResponseStatus 改成404 */
  @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
  public Map<String, Object> handleUserNotExistsException(UserCustException e) {
    Map<String, Object> map = new HashMap<>();
    map.put("url", e.getUrl());
    map.put("message", e.getMsg());
    return map;
  }
}

就此,大家可以愉快的使用UserCustException