本篇文章为大家展示了如何在SpringBoot中统一处理逻辑异常,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获
在Spring Boot项目中除了设置错误页面,还可以通过注解实现错误处理。
局部异常
局部异常:
在控制器类中添加一个方法,结合@ExceptionHandler。但是只能对当前控制器中方法出现异常进行解决。
引入lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
1.创建异常信息类
package com.yyl.firstdemo.exception;
import lombok.Data;
@Data
public class ExceptionMessage {
private String code;
private String message;
}2.在controller中设置异常处理
package com.yyl.firstdemo.controller;
import com.yyl.firstdemo.exception.ExceptionMessage;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ErrorController {
@RequestMapping("/test")
public String testError(){
System.out.println(5/0);
return "500";
}
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public ExceptionMessage arithmeticException(Exception e){
ExceptionMessage exceptionMessage = new ExceptionMessage();
exceptionMessage.setCode("500");
exceptionMessage.setMessage(e.getMessage());
return exceptionMessage;
}
}@ExceptionHandler的参数为发生异常的类型。如果controller的方法中捕获到了这种异常,就会走@ExceptionHandler表示的方法arithmeticException(),在方法参数中,可以获取异常对象。
最终执行结果:

当访问test的controller方法时,会出现除0异常,就会走异常处理方法,封装异常信息,返回,错误类封装的状态信息。
全局异常
新建全局异常类,通过@ControllerAdvice结合@ExceptionHandler。当全局异常处理和局部处理同时存在时,局部生效(就近原则)
编写全局异常处理器:
package com.yyl.firstdemo.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GlobalExceptionHandleController {
//发生除0异常时,会执行该方法
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public ExceptionMessage arithmeticException(Exception e){
ExceptionMessage exceptionMessage = new ExceptionMessage();
exceptionMessage.setCode("500");
exceptionMessage.setMessage(e.getMessage());
return exceptionMessage;
}
//发生空指针异常时会执行该方法
@ExceptionHandler(NullPointerException.class)
@ResponseBody
public ExceptionMessage nullPointerException(NullPointerException
e){
ExceptionMessage exceptionMessage = new ExceptionMessage();
exceptionMessage.setCode("500");
exceptionMessage.setMessage(e.getMessage());
return exceptionMessage;
}
//发生其他未知异常时,会执行该方法
@ExceptionHandler(Exception.class)
@ResponseBody
public ExceptionMessage otherException(){
ExceptionMessage exceptionMessage = new ExceptionMessage();
exceptionMessage.setCode("500");
exceptionMessage.setMessage("发生了其他未知异常!");
return exceptionMessage;
}
}编写controller,增加两个方法:
package com.yyl.firstdemo.controller;
import com.yyl.firstdemo.exception.ExceptionMessage;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ErrorController {
@RequestMapping("/test")
public String testError(){
System.out.println(5/0);
return "500";
}
@RequestMapping("/testNull")
public String testNull(){
String s = null;
System.out.println(s.length());
return null;
}
@RequestMapping("testOther")
public String testOther(){
int[] arr = new int[3];
System.out.println(arr[5]);
return null;
}
}测试结果如下:



我们再加上局部异常,再进行测试:
我们发现就近原则生效,异常被局部异常处理器捕获处理

到此这篇关于SpringBoot业务逻辑异常的处理方法介绍的文章就介绍到这了,更多相关SpringBoot业务逻辑异常内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:SpringBoot业务逻辑异常的处理方法介绍
基础教程推荐
- Java Web开发中过滤器和监听器使用详解 2023-06-30
- MyBatis-Plus自定义通用的方法实现 2023-07-15
- Java List的get方法 2023-10-08
- 一文带你搞懂Java中方法重写与方法重载的区别 2023-07-14
- Spring Cloud Config分布式配置中心使用介绍详解 2023-05-07
- Java多线程学习笔记之三内存屏障与Java内存模型 2023-09-01
- java知识点7——面向过程和面向对象、面向对象的内存分析、构造方法 2023-09-01
- RocketMQ Push 消费模型示例详解 2023-05-24
- Java实现插入排序算法可视化的示例代码 2023-04-23
- 关于Java双大括号{{}}的具体使用 2023-03-15
