spring mvc異常統一處理(實現HandlerExceptionResolver介面)不生效的問題解決
阿新 • • 發佈:2018-12-24
spring mvc異常統一處理常見的有3種方式:
- 使用 @ ExceptionHandler 註解
- 實現 HandlerExceptionResolver 介面
- 使用 @controlleradvice 註解
詳細的使用方法可參考博文:https://blog.csdn.net/yjclsx/article/details/85230404
有一次在實現HandlerExceptionResolver介面的方式進行統一異常處理時,發現並沒有起作用,如下:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @ClassName GlobalExceptionHandler * @Author jcyao * @Description * @Date 2018/12/24 9:47 * @Version 1.0 */ @Component public class GlobalExceptionHandler implements HandlerExceptionResolver { private static final Logger logger = LoggerFactory.getLogger("SHIZAI_LOGGER"); @Override public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { logger.error("統一異常處理捕獲了異常,請求地址:"+httpServletRequest.getRequestURL(),e); return null; } }
在日誌中並沒有打印出異常捕獲的資訊。
最後在spring的bean配置檔案中加上了<bean>配置後,就可以了,如下:
<bean id="handlerExceptionResolver" class="com.dingtalk.isv.access.web.interceptor.GlobalExceptionHandler"/>
加上了<bean>配置,就不需要在異常處理類中加@Component註解了。
原因是springmvc從容器中取自定義異常處理器時是通過指定的id去取的,這個id預設是handlerExceptionResolver。