36 lines
2.3 KiB
Markdown
36 lines
2.3 KiB
Markdown
### 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分发器类型。
|