Spring Boot中的 @ExceptionHandler
在Spring Boot中,@ExceptionHandler注解用于处理Controller中抛出的异常。当Controller中抛出异常时,Spring Boot会自动查找匹配的@ExceptionHandler方法,并调用该方法来处理异常。在本文中,我们将详细介绍@ExceptionHandler的作用和使用方法,并提供两个示例说明。
@ExceptionHandler的作用
@ExceptionHandler注解用于处理Controller中抛出的异常。当Controller中抛出异常时,Spring Boot会自动查找匹配的@ExceptionHandler方法,并调用该方法来处理异常。@ExceptionHandler方法可以返回一个ModelAndView对象,用于渲染异常页面或返回异常信息。
@ExceptionHandler的使用方法
使用@ExceptionHandler注解处理异常的步骤如下:
1.Controller类中定义一个@ExceptionHandler方法,用于处理指定类型的异常。
2. 在@ExceptionHandler方法中处理异常,并返回一个ModelAndView对象。
下面是一个简单的示例:
@RestController
public class UserController {
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
// 查询用户信息
User user = userService.getUserById(id);
if (user == null) {
throw new UserNotFoundException("用户不存在");
}
return user;
}
@ExceptionHandler(UserNotFoundException.class)
public ModelAndView handleUserNotFoundException(UserNotFoundException ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", ex.getMessage());
modelAndView.setViewName("error");
return modelAndView;
}
}
在上面的示例中,我们定义了一个UserController类,其中包含一个getUser方法和一个handleUserNotFoundException方法。getUser方法用于查询用户信息,如果用户不存在,则抛出UserNotFoundException异常。handleUserNotFoundException方法用于处理UserNotFoundException异常,并返回一个ModelAndView对象。
下面是另一个示例:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(Exception ex) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
errorResponse.setMessage(ex.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
在上面的示例中,我们定义了一个GlobalExceptionHandler类,并使用@RestControllerAdvice注解标记该类。该类中包含一个handleException方法,用于处理所有类型的异常。当Controller抛出异常时,Spring Boot会自动调用该方法,并返回一个ErrorResponse对象。
结论
在Spring Boot中,@ExceptionHandler注解用于处理Controller中抛出的异常。使用@ExceptionHandler注解处理的步骤包括在Controller类中定义一个@ExceptionHandler方法,用于处理指定类型的异常,并在@ExceptionHandler方法中处理异常,并返回一个ModelAndView对象或其他类型的响应。在实际应用中,我们可以根据具体的业务需求,灵活使用@ExceptionHandler注解来处理异常。