springboot异常处理机制

一、SpringBoot 404、500错误提示页面
错误提示页面的命名规则就是:错误码.html,如404是404.html,500是500.html 放在,也可以使用4xx.html,5xx.html,优先精确匹配也就是说如果404错误,会匹配的404.html
springboot异常处理机制
文章图片

如果使用freemarker则对应的是404.ftl,500.ftl
二、异常处理
@ExceptionHandler异常处理
SpringMVC提供了@ExceptionHandler 这个注解,在 SpringBoot 里面,我们同样可以使用它来做异常捕获。直接在对应的 Controller 里面增加一个异常处理的方法,并使用 @ExceptionHandler 标识它即可。

@ExceptionHandler(BuinessException.class) public String handleException(BuinessException e,Model model){ model.addAttribute("code",e.getCode() ); model.addAttribute("msg",e.getMessage()); return "error/exception"; }

@ExceptionHandler 拦截了异常,我们可以通过该注解实现自定义异常处理。其中,@ExceptionHandler 配置的 value 指定需要拦截的异常类型
这样只能做到单一的controller异常处理,项目中一般都存在着多个 Controller,它们其中大多数异常处理都大同小异,这样就合适在每一个 Controller 里面都编写一个对应的异常处理方法。可以将异常处理方法向上挪移到父类中,然后所有的 Controller 统一继承父类即可
@ControllerAdvice异常处理
实际开发中,需要对异常分门别类的进行处理,ControllerAdvice拦截异常并统一处理,
package com.sun.houses.controller.adapter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import com.sun.houses.exception.BuinessException; @ControllerAdvice public class MyExceptionHandler { private static Logger LOGGER = LoggerFactory.getLogger(MyExceptionHandler.class); @ExceptionHandler(BuinessException.class) public String handleException(BuinessException e,Model model){ LOGGER.error("buiness exception code:{},message:{}",e.getCode(),e.getMessage()); model.addAttribute("code",e.getCode() ); model.addAttribute("msg",e.getMessage()); return "error/exception"; }}

【springboot异常处理机制】@ExceptionHandler 指定要拦截的异常,我这里是自定义异常BuinessException

    推荐阅读