<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 27.1.8 錯誤處理 Spring Boot默認提供一個`/error`映射用來以合適的方式處理所有的錯誤,并將它注冊為servlet容器中全局的 錯誤頁面。對于機器客戶端(相對于瀏覽器而言,瀏覽器偏重于人的行為),它會產生一個具有詳細錯誤,HTTP狀態,異常信息的JSON響應。對于瀏覽器客戶端,它會產生一個白色標簽樣式(whitelabel)的錯誤視圖,該視圖將以HTML格式顯示同樣的數據(可以添加一個解析為'error'的View來自定義它)。為了完全替換默認的行為,你可以實現`ErrorController`,并注冊一個該類型的bean定義,或簡單地添加一個`ErrorAttributes`類型的bean以使用現存的機制,只是替換顯示的內容。 **注** `BasicErrorController`可以作為自定義`ErrorController`的基類,如果你想添加對新context type的處理(默認處理`text/html`),這會很有幫助。你只需要繼承`BasicErrorController`,添加一個public方法,并注解帶有`produces`屬性的`@RequestMapping`,然后創建該新類型的bean。 你也可以定義一個`@ControllerAdvice`去自定義某個特殊controller或exception類型的JSON文檔: ```java @ControllerAdvice(basePackageClasses = FooController.class) public class FooControllerAdvice extends ResponseEntityExceptionHandler { @ExceptionHandler(YourException.class) @ResponseBody ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) { HttpStatus status = getStatus(request); return new ResponseEntity<>(new CustomErrorType(status.value(), ex.getMessage()), status); } private HttpStatus getStatus(HttpServletRequest request) { Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); if (statusCode == null) { return HttpStatus.INTERNAL_SERVER_ERROR; } return HttpStatus.valueOf(statusCode); } } ``` 在以上示例中,如果跟`FooController`相同package的某個controller拋出`YourException`,一個`CustomerErrorType`類型的POJO的json展示將代替`ErrorAttributes`展示。 **自定義錯誤頁面** 如果想為某個給定的狀態碼展示一個自定義的HTML錯誤頁面,你需要將文件添加到`/error`文件夾下。錯誤頁面既可以是靜態HTML(比如,任何靜態資源文件夾下添加的),也可以是使用模板構建的,文件名必須是明確的狀態碼或一系列標簽。 例如,映射`404`到一個靜態HTML文件,你的目錄結構可能如下: ```properties src/ +- main/ +- java/ | + <source code> +- resources/ +- public/ +- error/ | +- 404.html +- <other public assets> ``` 使用FreeMarker模板映射所有`5xx`錯誤,你需要如下的目錄結構: ```properties src/ +- main/ +- java/ | + <source code> +- resources/ +- templates/ +- error/ | +- 5xx.ftl +- <other templates> ``` 對于更復雜的映射,你可以添加實現`ErrorViewResolver`接口的beans: ```java public class MyErrorViewResolver implements ErrorViewResolver { @Override public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { // Use the request or status to optionally return a ModelAndView return ... } } ``` 你也可以使用Spring MVC特性,比如[@ExceptionHandler方法](http://docs.spring.io/spring/docs/4.3.3.RELEASE/spring-framework-reference/htmlsingle/#mvc-exceptionhandlers)和[@ControllerAdvice](http://docs.spring.io/spring/docs/4.3.3.RELEASE/spring-framework-reference/htmlsingle/#mvc-ann-controller-advice),`ErrorController`將處理所有未處理的異常。 **映射Spring MVC以外的錯誤頁面** 對于不使用Spring MVC的應用,你可以通過`ErrorPageRegistrar`接口直接注冊`ErrorPages`。該抽象直接工作于底層內嵌servlet容器,即使你沒有Spring MVC的`DispatcherServlet`,它們仍舊可以工作。 ```java @Bean public ErrorPageRegistrar errorPageRegistrar(){ return new MyErrorPageRegistrar(); } // ... private static class MyErrorPageRegistrar implements ErrorPageRegistrar { @Override public void registerErrorPages(ErrorPageRegistry registry) { registry.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400")); } } ``` 注.如果你注冊一個`ErrorPage`,該頁面需要被一個`Filter`處理(在一些非Spring web框架中很常見,比如Jersey,Wicket),那么該`Filter`需要明確注冊為一個`ERROR`分發器(dispatcher),例如: ```java @Bean public FilterRegistrationBean myFilter() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new MyFilter()); ... registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class)); return registration; } ``` (默認的`FilterRegistrationBean`不包含`ERROR` dispatcher類型)。 **WebSphere應用服務器的錯誤處理** 當部署到一個servlet容器時,Spring Boot通過它的錯誤頁面過濾器將帶有錯誤狀態的請求轉發到恰當的錯誤頁面。request只有在response還沒提交時才能轉發(forwarded)到正確的錯誤頁面,而WebSphere應用服務器8.0及后續版本默認情況會在servlet方法成功執行后提交response,你需要設置`com.ibm.ws.webcontainer.invokeFlushAfterService`屬性為`false`來關閉該行為。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看