Spring Boot 学习笔记(十三)——全局异常处理

默认异常处理机制

1、Whitelabel Error Page
当客户端访问页面不存在,或服务端处理发生异常,一般浏览器客户端发送的请求头中为:Accept:text/html;所以就返回一个html文档。
这里有一个很重要的类:BasicErrorController,对于比较复杂的自定义要求,可以继承该类,定义相应的ModelAndView。
2、用Postman等调试工具发送一个不存在的URL;或返回一个json字符串:

{
    "timestamp": "2018-05-12T06:11:45.209+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/index.html"
}

自定义错误页面

优先级:
1、error.html会覆盖默认的 whitelabel Error Page 错误提示
2、静态错误页面优先级别比error.html高
3、动态模板错误页面优先级比静态错误页面高

注意:对与高级复杂的错误覆盖:
1、现在配置类中配置:
EmbeddedServletContainerCustomizer类,重写customize方法,

@Configuration
public class ContainerConfig {
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer(){
        return new EmbeddedServletContainerCustomizer(){
            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {
                container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500"));
                container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404"));
            }
        };
    }
}

将产生的异常错误请求进行转发,转发到的新映射,可以看成访问路径,在Controller类的方法中作为输入的值,也就是@RequestMapping的value。

@ControllerAdvice处理异常

上文中的BasicErrorController继承了AbstractErrorController,后者又实现了ErrorController接口,所以源头是ErrorController,这是一种全局性的容错机制。

此外,还有以下两个注解可以对指定异常进行特殊处理:主要是高亮的注解,这个注解用在方法上。

1、局部异常处理:@Controller+@ExceptionHandler
2、全局异常处理:@ControllerAdvice+@ExceptionHandler

在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder@ModelAttribute,并应用到所有@RequestMapping中。
?标亮的是啥???

搞明白了:所以ModelAndView视图对象的setViewName方法的名字,就是资源的存放路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值