SpringBoot-10-全局异常

简介: SpringBoot-10-全局异常

SpringBoot-10-全局异常


我们在做后台开发的时候,出现错误是很正常的,SpringBoot异常报错有一默认的映射:/error,当出现错误的时候,SpringBoot会转到该请求中,并且这个请求还有一个全局的错误页面来展示这个错误。

新建一个SpringBoot项目,代码如下:

@Controller
public class TestController {
    @GetMapping("/test")
    public String test() throws  Exception{
       int a=1/0;
       return "test";
    }
}



然后访问http://localhost:8080/test,就会出现以下报错的页面,这个页面就是默认的error页面

异常统一处理


虽然SpringBoot存在默认的error错误页,但是显示的信息不够友好,需要我们对其进行修改,修改过程如下:


创建全局异常类:通过使用**@RestControllerAdvice+@ExceptionHandler**进行全局异常处理,就不需要在所有的Controller中定义异常。代码如下:

@RestControllerAdvice
public class GlobalExceptionHandler {
    public static final String ERROR_VIEW = "error";
    @ExceptionHandler(value = Exception.class)
    public ModelAndView exceptionError(HttpServletRequest req, Exception e) throws Exception{
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());
        mav.setViewName(ERROR_VIEW);
        return mav;
    }
}


注:


@RestControllerAdvice用于获取Controller层的异常,并返回JSON格式。


@ExceptionHandler是一种统一处理异常的注解,用于减少代码重复率,降低复杂度。


实现自定义的error.html页面展示,放在src\main\resources\templates目录下代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head lang="en">
    <meta charset="UTF-8" />
    <title>异常统一处理</title>
</head>
<body>
<h1>异常统一处理</h1>
<div >
    错误请求地址:<label th:text="${url}"></label><br/>
    错误信息:<label th:text="${exception.message}"></label><br/>
</div>
</body>
</html>


  • 启动项目,访问http://localhost:8080/test,显示结果如下:

自定义异常处理:


  • 创建一个统一的异常处理实体:
@Data
public class Result<T> implements Serializable {
    public static final Integer SUCCESS = 200;
    public static final Integer FAILURE_ERROR = 404;
    private static final long serialVersionUID = 1L;
    /**
     * 代码
     */
    private int code;
    /**
     * 信息
     */
    private String msg;
    /**
     * 时间
     */
    private long time;
    /**
     * 数据实体
     */
    private T data;
}



  • 创建GlobalException自定义的全局异常处理类
public class GlobalException extends Exception{
    public GlobalException(String msg){
        super(msg);
    }
}



  • 在Controller层创建一个测试方法
    @GetMapping("/testexception")
    public String testexception() throws GlobalException {
        throw new GlobalException("发生test错误2");
    }


  • 修改GlobalException异常创建对应的处理
@RestControllerAdvice
public class GlobalExceptionHandler {
    public static final String ERROR_VIEW = "error";
    @ExceptionHandler(value = GlobalException.class)
    public  Result<String> exceptionError(HttpServletRequest req, GlobalException e) throws Exception{
//        ModelAndView mav = new ModelAndView();
//        mav.addObject("exception", e);
//        mav.addObject("url", req.getRequestURL());
//        mav.setViewName(ERROR_VIEW);
        Result<String> result = new Result<>();
        result.setTime( System.currentTimeMillis());
        result.setMsg(e.getMessage());
        result.setCode(404);
        result.setData(req.getRequestURL().toString());
        return result;
    }
}


启动应用,访问:http://localhost:8080/testexception,可以得到如下返回内容:

如果您觉得本文不错,欢迎关注支持,您的关注是我坚持的动力!

目录
相关文章
|
1月前
|
Dubbo Java 应用服务中间件
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
39 1
|
2月前
|
Java API Spring
springBoot:注解&封装类&异常类&登录实现类 (八)
本文介绍了Spring Boot项目中的一些关键代码片段,包括使用`@PathVariable`绑定路径参数、创建封装类Result和异常处理类GlobalException、定义常量接口Constants、自定义异常ServiceException以及实现用户登录功能。通过这些代码,展示了如何构建RESTful API,处理请求参数,统一返回结果格式,以及全局异常处理等核心功能。
|
2月前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
274 10
|
2月前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
132 6
|
4月前
|
前端开发 小程序 Java
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
本文详细介绍了如何在SpringBoot项目中统一处理接口返回结果及全局异常。首先,通过封装`ResponseResult`类,实现了接口返回结果的规范化,包括状态码、状态信息、返回信息和数据等字段,提供了多种成功和失败的返回方法。其次,利用`@RestControllerAdvice`和`@ExceptionHandler`注解配置全局异常处理,捕获并友好地处理各种异常信息。
1650 0
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
|
4月前
|
消息中间件 Java 开发工具
【Azure 事件中心】Spring Cloud Stream Event Hubs Binder 发送Event Hub消息遇见 Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially 异常
【Azure 事件中心】Spring Cloud Stream Event Hubs Binder 发送Event Hub消息遇见 Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially 异常
|
4月前
|
Java Spring
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
|
4月前
|
Java Spring
【Azure 服务总线】Spring Cloud 的应用 使用Service Bus 引起 org.springframework.beans.BeanInstantiationException 异常,无法启动
【Azure 服务总线】Spring Cloud 的应用 使用Service Bus 引起 org.springframework.beans.BeanInstantiationException 异常,无法启动
|
4月前
|
NoSQL Java Redis
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常
|
4月前
|
Dubbo Java Nacos
【实战攻略】破解Dubbo+Nacos+Spring Boot 3 Native打包后运行异常的终极秘籍——从零开始彻底攻克那些让你头疼不已的技术难题!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但使用Dubbo+Nacos+Spring Boot 3进行GraalVM native打包后常遇运行异常。本文剖析此问题及其解决策略:确认GraalVM版本兼容性;配置反射列表以支持必要类和方法;采用静态代理替代动态代理;检查并调整配置文件;禁用不支持的功能;利用日志和GraalVM诊断工具定位问题;根据诊断结果调整GraalVM配置。通过系统排查方法,能有效解决此类问题,确保服务稳定运行。
104 0