springboot异常处理机制

一、SpringBoot 404、500错误提示页面 

  错误提示页面的命名规则就是:错误码.html,如404是404.html,500是500.html 放在,也可以使用4xx.html,5xx.html,优先精确匹配也就是说如果404错误,会匹配的404.html

springboot异常处理机制_第1张图片

如果使用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";
    }
    
  
}

@ExceptionHandler 指定要拦截的异常,我这里是自定义异常BuinessException

你可能感兴趣的:(springboot)