springboot全局自定义异常

简介: springboot全局自定义异常

1.自定义异常

package com.xxx.dzwz.util.exception;

/**

  • 自定义异常
  • @date 2024-01-19 10:00:00
  • @author wangwei
    */
    public class CustomException extends RuntimeException {
    private static final long serialVersionUID = 1L;

    private Integer code;

    private String message;

    public CustomException(String message) {
    this.message = message;
    }

    public CustomException(String message, Integer code) {
    this.message = message;
    this.code = code;
    }

    public CustomException(String message, Throwable e) {
    super(message, e);
    this.message = message;
    }

    @Override
    public String getMessage() {
    return message;
    }

    public Integer getCode() {
    return code;
    }

}
2.业务异常
package com.xxx.dzwz.util.exception;

/**

  • 业务异常
  • @author wangwei
    */
    public final class ServiceException extends RuntimeException
    {
    private static final long serialVersionUID = 1L;

    /**

    • 错误码
      */
      private Integer code;

      /**

    • 错误提示
      */
      private String message;

      /**

    • 错误明细,内部调试错误
      *
    • 和 {@link CommonResult#getDetailMessage()} 一致的设计
      */
      private String detailMessage;

      /**

    • 空构造方法,避免反序列化问题
      */
      public ServiceException()
      {
      }

      public ServiceException(String message)
      {
      this.message = message;
      }

      public ServiceException(String message, Integer code)
      {
      this.message = message;
      this.code = code;
      }

      public String getDetailMessage()
      {
      return detailMessage;
      }

      @Override
      public String getMessage()
      {
      return message;
      }

      public Integer getCode()
      {
      return code;
      }

      public com.cmrx.dzwz.util.exception.ServiceException setMessage(String message)
      {
      this.message = message;
      return this;
      }

      public com.cmrx.dzwz.util.exception.ServiceException setDetailMessage(String detailMessage)
      {
      this.detailMessage = detailMessage;
      return this;
      }
      }

3.全局异常处理器
package com.xxx.dzwz.util.exception;
import com.xxx.dzwz.util.AjaxResult;
import com.xxx.dzwz.util.StringUtils;
import com.xxx.dzwz.util.pageutil.HttpStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
import java.nio.file.AccessDeniedException;

/**

  • 全局异常处理器
    • @date 2024-01-30 09:46:00
  • @author wangwei
    */
    @RestControllerAdvice
    public class GlobalExceptionHandler
    {
    private static final Logger log = LoggerFactory.getLogger(com.cmrx.dzwz.util.exception.GlobalExceptionHandler.class);

    /**

    • 权限校验异常
      */
      @ExceptionHandler(AccessDeniedException.class)
      public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request)
      {
      String requestURI = request.getRequestURI();
      log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage());
      return AjaxResult.error(HttpStatus.FORBIDDEN, "没有权限,请联系管理员授权");
      }

      /**

    • 请求方式不支持
      */
      @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
      public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,

                                                     HttpServletRequest request)
      

      {
      String requestURI = request.getRequestURI();
      log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
      return AjaxResult.error(e.getMessage());
      }

      /**

    • 业务异常
      */
      @ExceptionHandler(ServiceException.class)
      public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request)
      {
      log.error(e.getMessage(), e);
      Integer code = e.getCode();
      return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());
      }

      /**

    • 拦截未知的运行时异常
      */
      @ExceptionHandler(RuntimeException.class)
      public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request)
      {
      String requestURI = request.getRequestURI();
      log.error("请求地址'{}',发生未知异常.", requestURI, e);
      return AjaxResult.error(e.getMessage());
      }

      /**

    • 系统异常
      */
      @ExceptionHandler(Exception.class)
      public AjaxResult handleException(Exception e, HttpServletRequest request)
      {
      String requestURI = request.getRequestURI();
      log.error("请求地址'{}',发生系统异常.", requestURI, e);
      return AjaxResult.error(e.getMessage());
      }

      /**

    • 自定义验证异常
      */
      @ExceptionHandler(BindException.class)
      public AjaxResult handleBindException(BindException e)
      {
      log.error(e.getMessage(), e);
      String message = e.getAllErrors().get(0).getDefaultMessage();
      return AjaxResult.error(message);
      }

      /**

    • 自定义验证异常
      */
      @ExceptionHandler(MethodArgumentNotValidException.class)
      public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e)
      {
      log.error(e.getMessage(), e);
      String message = e.getBindingResult().getFieldError().getDefaultMessage();
      return AjaxResult.error(message);
      }

      /**

    • 演示模式异常
      /
      /
      @ExceptionHandler(DemoModeException.class)
      public AjaxResult handleDemoModeException(DemoModeException e)
      {
      return AjaxResult.error("演示模式,不允许操作");
      }*/
      }
相关文章
|
1月前
|
Dubbo Java 应用服务中间件
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
49 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格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
325 10
|
2月前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
172 6
|
4月前
|
前端开发 小程序 Java
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
本文详细介绍了如何在SpringBoot项目中统一处理接口返回结果及全局异常。首先,通过封装`ResponseResult`类,实现了接口返回结果的规范化,包括状态码、状态信息、返回信息和数据等字段,提供了多种成功和失败的返回方法。其次,利用`@RestControllerAdvice`和`@ExceptionHandler`注解配置全局异常处理,捕获并友好地处理各种异常信息。
1952 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配置。通过系统排查方法,能有效解决此类问题,确保服务稳定运行。
113 0