全局异常介绍
使用Web应用时,在请求处理过程中发生错误是非常常见的情况。SpringBoot提供一个默认映射:/error,当处理中抛出异常后,会转到请求中处理,并且该请求有一个全局的错误页面来展示异常内容。但实际使用中错误页面对用户并不友好,我们需要自己实现异常提示。
全局异常使用
1.制作一个错误页面,也可以网上参考精美页面的源码
2.创建ErrorPageConfig配置类,在springboot1x使用EmbeddedWebServerFactoryCustomizer进行自定义定制配置组件,但是springboot2x 版本 废弃了该类,使用WebServerFactoryCustomizer。注意 配置类的配置相关注解使用
/**
* @program: demo
* @description: 自定义错误页面
* @author: wllmp520
* @create: 2019-06-20 18:17
*/
@Configuration
public class ErrorPageConfig {
@Bean
public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){
//lamb da表达式
return (container -> {
ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html");
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");
ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");
container.addErrorPages(error401Page, error404Page, error500Page);
});
}
}
3.启动服务 测试,输入一个不存在的项目链接,出现404.html
全局异常类开发
1.自定义异常信息类
@Data
public class ErrorInfo<T> {
public static final Integer SUCCESS=200;
public static final Integer ERROR=100;
//错误码
private Integer code;
//错误信息
private String meassage;
private String url;
private T data;
}
2.创建统一异常处理类,@ControllerAdvice定义统一的异常处理类,扫描包中类进行异常处理
@ControllerAdvice(basePackages = {"com.example.demo",})
public class GlobalDefalutExceptionHanlder {
@ExceptionHandler({BusinessException.class})
@ResponseBody
public ErrorInfo defaultErrorHandler(HttpServletRequest request, Exception e) throws Exception{
ErrorInfo errorInfo=new ErrorInfo();
errorInfo.setMeassage(e.getMessage());
errorInfo.setUrl(request.getRequestURI());
errorInfo.setCode(errorInfo.SUCCESS);
return errorInfo;
}
}
3.测试
@RequestMapping("/findAll")
public String findAll(Model model){
List<AyUser> userList=ayUserService.findAll();
model.addAttribute("userList",userList);
throw new BusinessException("业务异常????");
}
结果: