From 2b929e810ba5a07703069e8e0abf3de041e7c0d3 Mon Sep 17 00:00:00 2001 From: qibaoguang Date: Tue, 10 Feb 2015 23:45:55 +0800 Subject: [PATCH] Update 26.1.6. Error Handling.md --- .../26.1.6. Error Handling.md | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/IV. Spring Boot features/26.1.6. Error Handling.md b/IV. Spring Boot features/26.1.6. Error Handling.md index e69de29..d32b805 100644 --- a/IV. Spring Boot features/26.1.6. Error Handling.md +++ b/IV. Spring Boot features/26.1.6. Error Handling.md @@ -0,0 +1,35 @@ +### 26.1.6. 错误处理 + +Spring Boot默认提供一个/error映射用来以合适的方式处理所有的错误,并且它在servlet容器中注册了一个全局的 +错误页面。对于机器客户端(相对于浏览器而言,浏览器偏重于人的行为),它会产生一个具有详细错误,HTTP状态,异常信息的JSON响应。对于浏览器客户端,它会产生一个白色标签样式(whitelabel)的错误视图,该视图将以HTML格式显示同样的数据(可以添加一个解析为erro的View来自定义它)。为了完全替换默认的行为,你可以实现ErrorController,并注册一个该类型的bean定义,或简单地添加一个ErrorAttributes类型的bean以使用现存的机制,只是替换显示的内容。 + +如果在某些条件下需要比较多的错误页面,内嵌的servlet容器提供了一个统一的Java DSL(领域特定语言)来自定义错误处理。 +示例: +```java +@Bean +public EmbeddedServletContainerCustomizer containerCustomizer(){ + return new MyCustomizer(); +} + +// ... +private static class MyCustomizer implements EmbeddedServletContainerCustomizer { + @Override + public void customize(ConfigurableEmbeddedServletContainer container) { + container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400")); + } +} +``` +你也可以使用常规的Spring MVC特性来处理错误,比如[@ExceptionHandler方法](http://docs.spring.io/spring/docs/4.1.4.RELEASE/spring-framework-reference/htmlsingle/#mvc-exceptionhandlers)和[@ControllerAdvice](http://docs.spring.io/spring/docs/4.1.4.RELEASE/spring-framework-reference/htmlsingle/#mvc-ann-controller-advice)。ErrorController将会捡起任何没有处理的异常。 + +N.B. 如果你为一个路径注册一个ErrorPage,最终被一个过滤器(Filter)处理(对于一些非Spring web框架,像Jersey和Wicket这很常见),然后过滤器需要显式注册为一个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分发器类型。