Spring Boot hat eine einheitliche Ausnahmebehandlung implementiert
1.1 Statische Seite
Muss im Ordner resources/static/error konfiguriert werden, benannt nach dem Fehlercode
Das Folgende ist der Inhalt des 404 Fehlerseite beim Zugriff Wenn kein Link vorhanden ist, suchen Sie diese Seite
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Not Found</title></head><body><h1>Sorry, Not Found</h1><p>status code is 404</p></body></html>
1.2 Dynamische Vorlagenseite (der Speicherort der Seite kann nicht geändert werden und es gibt nur zwei Namen: 4xx und 5xx)
Beispiel ( 5xx.ftl)
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Error</title></head><body><h1>server error</h1><p><div style="color:red;font-size:large">error code: ${status}-${error}</div><div style="color:red;font-size:medium">error msg: ${exception!},${message!}</div><div><div id="trace" style="color:grey;font-size:small;display: none;border: 1px solid black;padding: 10px;">${trace!}</div></div></p></body></html>
Beabsichtigter Zugriff auf eine Anfrage, die eine Ausnahme auslöst (/test2/throwex)
@Controller @RequestMapping("/test2")public class Test2 { @RequestMapping("")public String index(){return "test"; } @RequestMapping("/throwex") @ResponseBodypublic String throwex(){int a = 3;int b=0;return String.valueOf(a/b); } }
Wenn Sie Ajax verwenden, um auf diese Fehleranforderung zuzugreifen, wird die durch JSON dargestellte Fehlermeldung zurückgegeben
Demoseite ( /test2 -> test.ftl)
<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>test</title><script type="text/javascript" src="/js/jquery-2.0.3.min.js?1.1.11"></script></head><body><h1>test page</h1><div><button onclick="doAjax();">请求异常测试</button><div id="msg"></div><textarea id="errorMsg" style="color:red;width: 80%;height:300px"></textarea></div><script type="text/javascript">var doAjax = function () { $.ajax({ url:'/test2/throwex', async:true, type:'GET', data:{}, dataType:'json', success:function (data) { $('#msg').text(data); }, error: function(xhr, textStatus, errorThrown) {// alert(XMLHttpRequest.status);// alert(XMLHttpRequest.readyState);// alert(textStatus); $('#errorMsg').text(xhr.responseText); } }); };</script></body></html>
Hier sind die Fehler beim Zugriff über einen Webbrowser und Ajax. Die Schnittstelle erhält unterschiedliche Ergebnisse, eine gibt eine Fehlerseite aus und die andere gibt einen Fehler-JSON aus, der durch den Empfangstyp der Anfrage bestimmt wird.
Accept:text/html -> Fehlerseite zurückgeben
Accept:application/json, text/javascript -> Fehlerseite zurückgeben2. Passen Sie die Zuordnung von Fehlercodes zu Seiten an
2.1 Konfiguration der statischen Seitenzuordnung (steuern Sie die Fehlercode-Zuordnungsbeziehung, wenn Anpassen des eingebetteten Containers)
@Componentpublic class CustomizationBean implements EmbeddedServletContainerCustomizer{/** * 定制方法一:实现EmbeddedServletContainerCustomizer * @param container */@Overridepublic void customize(ConfigurableEmbeddedServletContainer container) {//container.setPort(9000); }/** * 定制方法二:注入EmbeddedServletContainerFactory * @return */@Beanpublic EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); factory.setPort(9001); factory.setSessionTimeout(10, TimeUnit.MINUTES);//优先级高于配置在/static/error文件夹里面的404.html页面factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/403.html"));return factory; } }
2.2 Dynamische Seitenzuordnungskonfiguration
@Componentpublic class MyErrorViewResolver implements ErrorViewResolver { @Overridepublic ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { return new ModelAndView("/error/error",model);} }
Dieser benutzerdefinierte ViewResolver ersetzt den Standardseitenprozessor DefaultErrorViewResolver. Die obige Konfiguration ordnet alle Fehler (unabhängig von den Fehlercodes) der Fehlerseite error.ftl zu, um eine einheitliche Verwaltung zu ermöglichen.
Neue error.ftl-Seite mit Fehlerinhalten
Ähnliche Konfiguration wie 5xx.ftl
3. Einige abnormale Konfigurationen
> ; Fehlerattribut gibt Modell zurück)-> Wirf es an den Seitenprozessor ErrorViewResolver
#BasicErrorController的请求路径(你可以遇到错误后跳转的路径,该路径是一个BasicErrorController的请求路径,映射到它errorHtml或者error方法,由请求接受类型决定,一个返回错误页面,一个返回错误json)
#server.error.path=/error
#always include stacktrace(是否包含异常的堆栈信息,默认NEVER,页面无法获取到${trace!}的值,可取值NEVER,ALWAYS,ON_TRACE_PARAM; on_trace_param意思是请求带上参数 ?trace=true)
<em>server.error.include-stacktrace=always<br><br><br></em>
, damit du den Controller anpassen/anpassen kannst
ErrorAttributes/Customization
ErrorViewResolver usw., um eine komplexere Ausnahmebehandlung zu erreichen
Das obige ist der detaillierte Inhalt vonAusnahmeregelung für Spring Boot 1.5.4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!