這期內(nèi)容當中小編將會給大家?guī)碛嘘PSpringboot項目中如何實現(xiàn)異常處理自定義,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站設計、網(wǎng)站建設、榮昌網(wǎng)絡推廣、微信小程序、榮昌網(wǎng)絡營銷、榮昌企業(yè)策劃、榮昌品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供榮昌建站搭建服務,24小時服務熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
背景
Springboot 默認把異常的處理集中到一個ModelAndView中了,但項目的實際過程中,這樣做,并不能滿足我們的要求。具體的自定義異常的處理,參看以下
具體實現(xiàn)
如果仔細看完spring boot的異常處理詳解,并且研究過源碼后,我覺得具體的實現(xiàn)可以不用看了。。。
重寫定義錯誤頁面的url,默認只有一個/error
@Bean public EmbeddedServletContainerCustomizer containerCustomizer(){ return new EmbeddedServletContainerCustomizer(){ @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404")); container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500")); container.addErrorPages(new ErrorPage(java.lang.Throwable.class,"/error/500")); } }; }
重寫通過實現(xiàn)ErrorController,重寫B(tài)asicErrorController的功能實現(xiàn)
/** * 重寫B(tài)asicErrorController,主要負責系統(tǒng)的異常頁面的處理以及錯誤信息的顯示 * @see org.springframework.boot.autoconfigure.web.BasicErrorController * @see org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration * * @author Jonathan * @version 2016/5/31 11:22 * @since JDK 7.0+ */ @Controller @RequestMapping(value = "error") @EnableConfigurationProperties({ServerProperties.class}) public class ExceptionController implements ErrorController { private ErrorAttributes errorAttributes; @Autowired private ServerProperties serverProperties; /** * 初始化ExceptionController * @param errorAttributes */ @Autowired public ExceptionController(ErrorAttributes errorAttributes) { Assert.notNull(errorAttributes, "ErrorAttributes must not be null"); this.errorAttributes = errorAttributes; } /** * 定義404的ModelAndView * @param request * @param response * @return */ @RequestMapping(produces = "text/html",value = "404") public ModelAndView errorHtml404(HttpServletRequest request, HttpServletResponse response) { response.setStatus(getStatus(request).value()); Mapmodel = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.TEXT_HTML)); return new ModelAndView("error/404", model); } /** * 定義404的JSON數(shù)據(jù) * @param request * @return */ @RequestMapping(value = "404") @ResponseBody public ResponseEntity
總結(jié)
第一步,通過定義containerCustomizer,重寫定義了異常處理對應的視圖。目前定義了404和500,可以繼續(xù)擴展。
第二步,重寫B(tài)asicErrorController,當然可以直接定義一個普通的controller類,直接實現(xiàn)第一步定義的視圖的方法。重寫的目的是重用ErrorAttributes。這樣在頁面,直接可以獲取到status,message,exception,trace等內(nèi)容。
如果僅僅是把異常處理的視圖作為靜態(tài)頁面,不需要看到異常信息內(nèi)容的話,直接第一步后,再定義error/404,error/500等靜態(tài)視圖即可。
ErrorController根據(jù)Accept頭的內(nèi)容,輸出不同格式的錯誤響應。比如針對瀏覽器的請求生成html頁面,針對其它請求生成json格式的返回
上述就是小編為大家分享的Springboot項目中如何實現(xiàn)異常處理自定義了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。