一、概述
在使用Spring Boot开发Web应用的过程中,我们经常会遇到程序抛出异常的情况。如何优雅地处理这些异常,返回友好的错误信息给客户端,是很重要的一件事情。Spring Boot提供了全局异常处理机制,可以方便地实现统一的异常处理逻辑,减少代码重复,提高开发效率。
本文将介绍如何使用Spring Boot自带的全局异常处理机制,搭建一个通用的全局异常拦截器,并提供两个示例,演示如何处理业务异常和系统异常。
二、创建全局异常拦截器
- 创建异常处理类
在Spring Boot项目中创建一个异常处理类,用于捕获全局异常。可以继承Spring Boot提供的ResponseEntityExceptionHandler
类,并重写handleExceptionInternal
方法,自定义处理逻辑:
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers,
HttpStatus status, WebRequest request) {
String msg = ex.getMessage();
if (StringUtils.isEmpty(msg)) {
msg = "服务器异常,请联系管理员!";
}
Map<String, Object> result = new HashMap<>();
result.put("code", status.value());
result.put("msg", msg);
return new ResponseEntity<>(result, status);
}
}
- 自定义异常
在项目中定义一个自定义异常,用于抛出业务异常。需要继承RuntimeException
类,并在构造方法中传入异常信息:
public class BusinessException extends RuntimeException {
public BusinessException(String msg) {
super(msg);
}
}
- 抛出业务异常
在业务代码中抛出自定义异常:
public class UserService {
public User getById(int id) {
User user = userRepository.findOne(id);
if (user == null) {
throw new BusinessException("用户不存在!");
}
return user;
}
}
- 抛出系统异常
在业务代码中抛出系统异常:
public class UserService {
public void deleteById(int id) {
int result = userRepository.delete(id);
if (result == 0) {
throw new RuntimeException("删除用户失败!");
}
}
}
三、运行示例代码
- 处理业务异常
使用Spring Boot提供的RestController
注解创建一个测试接口:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getById(@PathVariable int id) {
return userService.getById(id);
}
}
在访问/user/1
时,由于id为1的用户不存在,会抛出自定义的业务异常。全局异常拦截器会捕获并处理该异常,返回以下JSON数据:
{
"code": 500,
"msg": "用户不存在!"
}
- 处理系统异常
创建另一个测试接口:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@DeleteMapping("/{id}")
public String deleteById(@PathVariable int id) {
userService.deleteById(id);
return "删除成功!";
}
}
在访问/user/1
时,由于id为1的用户不存在,会抛出系统异常。全局异常拦截器会捕获并处理该异常,返回以下JSON数据:
{
"code": 500,
"msg": "删除用户失败!"
}
以上就是使用Spring Boot搭建全局异常拦截的完整攻略。通过自定义异常和全局异常拦截器,我们可以更加优雅地处理程序中出现的各种异常情况,提升应用的健壮性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot搭建全局异常拦截 - Python技术站