Heim  >  Artikel  >  Java  >  Ausnahmeregelung für Spring Boot 1.5.4

Ausnahmeregelung für Spring Boot 1.5.4

巴扎黑
巴扎黑Original
2017-06-26 11:35:111469Durchsuche

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>
Anzeigeeffekt

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);
    }
}
Seiteneffekt

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>
Besuchen Sie die Testseite, klicken Sie auf die Schaltfläche und überprüfen Sie den Effekt wie folgt:

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ückgeben
Die spezifische Implementierung kann die BasicErrorController-Klasse anzeigen

2. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn