1. 程式人生 > >springboot異常處理機制

springboot異常處理機制

一、SpringBoot 404、500錯誤提示頁面 

  錯誤提示頁面的命名規則就是:錯誤碼.html,如404是404.html,500是500.html 放在,也可以使用4xx.html,5xx.html,優先精確匹配也就是說如果404錯誤,會匹配的404.html

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