毕业设计代做的网站,做家庭影院的有哪些网站,哪个网站做logo好,免费在线咨询软件异常主要是包括编译时的异常和运行时的异常。编译时的异常可以通过捕获异常获取#xff0c;运行时候的异常主要是通过代码规范#xff0c;或者测试。 Spring Boot提供了两种异常处理方式来统一处理和维护异常信息。 第一种方式是使用RestControllerAdvice注解与ExceptionHand… 异常主要是包括编译时的异常和运行时的异常。编译时的异常可以通过捕获异常获取运行时候的异常主要是通过代码规范或者测试。 Spring Boot提供了两种异常处理方式来统一处理和维护异常信息。 第一种方式是使用RestControllerAdvice注解与ExceptionHandler注解配合使用。第二种方式是ErrorController类因为第一种方式主要是捕获在接口类的异常如果需要自定义处理特定的HTTP错误代码404401未进入控制器的和自定义错误页面则需要使用ErrorController。 一般来说只使用RestControllerAdviceExceptionHandler就够了。 ControllerAdvice可以用来实现对Controller的全局异常处理与传统的基于AOP的方法不同使用ControllerAdvice可以捕获所有Controller中抛出的异常而无需在每个Controller中配置ExceptionHandler。通过在该类中使用ExceptionHandler注解可以根据不同的异常类型定义相应的处理方法。 ControllerAdvice需要配合ExceptionHandler一起使用。 而RestControllerAdvice是集合了ControllerAdviceResponseBody的功能只是以JSON格式返回处理结果。 创建个exception包在其中创建自定义异常类 自定义异常 public class SystemException extends RuntimeException {
private int code;
private String msg;//获取枚举类中的codepublic int getCode() {return code;}//获取枚举类中的msgpublic String getMsg() {return msg;}
public SystemException(RespBeanEnum respBeanEnum) {//表示调用父类RuntimeException的构造方法并传入respBeanEnum.getMsg()作为参数super(respBeanEnum.getMsg());this.code respBeanEnum.getCode();//这个其实是多余的在super方法中就已经传了msg不过便于阅读。this.msg respBeanEnum.getMsg();}
} SystemException构造方法的参数是RespBeanEnum: 定义一个枚举类列出所有可能的错误类型并为每个错误类型指定一个对应的错误码和错误消息。然后在自定义异常类中引用该枚举类并使用其中的错误码和错误消息来初始化异常对象。
public enum RespBeanEnum { int code;String msg; SUCCESS(200, 操作成功),ERROR(500, 出现错误)RespBeanEnum(int code, String errorMessage) {this.code code;this.msg errorMessage;}public int getCode() {return code;}
public String getMsg() {return msg;}
} 解释1 super(respBeanEnum.getMsg())这个方法是调用父类的构造方法。最上面是
public Throwable(String message) {fillInStackTrace();detailMessage message;
} 它的作用是利用父类的异常处理机制RuntimeExpetion其包含了父类的一些异常处理机制如堆栈轨迹异常链的部分。则得在自定义异常类的构造方法中使用supermsg 通过super(respBeanEnum.getMsg())将错误消息传递给父类的构造方法用于创建一个带有指定错误消息的自定义异常对象 SystemException。
通过结合枚举类可以有以下优势 错误分类清晰明确枚举类可以将各种错误类型进行分类使得代码的错误处理更具可读性和可维护性。 统一管理错误信息在枚举类中定义错误码和错误消息可以集中管理和维护所有错误信息方便后续的修改和扩展。 可拓展性通过扩展枚举类可以轻松添加新的错误类型而无需修改和添加大量的代码。 自定义全局异常处理 RestControllerAdvice
Slf4j
public class GlobalExceptionHandler {//处理自定义异常ExceptionHandler(SystemException.class)public RespBean systemExceptionHandler(SystemException e) {//打印异常信息log.error(出现了异常 {}, e);//从异常对象中获取提示信息封装返回//实际上e.getCode() 和 e.getMsg()返回的值就是枚举类定义的属性值return RespBean.errorResult(e.getCode(), e.getMsg());}//处理其他异常ExceptionHandler(Exception.class)public RespBean exceptionHandler(Exception e) {//打印异常信息log.error(出现了异常 {}, e);//从异常对象中获取提示信息封装返回return RespBean.errorResult(RespBeanEnum.SYSTEM_ERROR.getCode(), e.getMessage());}
}
ERROR(500, 出现错误),得到枚举类的code