在Spring Boot中使用MyBatis时,处理异常的方法有以下几种:
try-catch
语句捕获异常:在需要处理异常的地方,使用try-catch
语句捕获异常,然后在catch
块中处理异常。例如:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(int id) {
try {
return userMapper.getUserById(id);
} catch (Exception e) {
// 处理异常,例如打印日志、抛出自定义异常等
e.printStackTrace();
throw new CustomException("获取用户信息失败");
}
}
}
@ControllerAdvice
和@ExceptionHandler
注解处理全局异常:创建一个全局异常处理类,使用@ControllerAdvice
注解标记该类。在该类中,使用@ExceptionHandler
注解定义处理特定异常的方法。例如:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public ResponseEntity<Object> handleException(Exception e) {
// 处理异常,例如打印日志、返回错误信息等
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务器内部错误");
}
@ExceptionHandler(value = CustomException.class)
public ResponseEntity<Object> handleCustomException(CustomException e) {
// 处理自定义异常
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
}
}
@ResponseStatus
注解定义特定异常的HTTP状态码:在自定义异常类上使用@ResponseStatus
注解,指定异常对应的HTTP状态码。例如:
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "获取用户信息失败")
public class CustomException extends RuntimeException {
public CustomException(String message) {
super(message);
}
}
这样,当抛出CustomException
异常时,Spring Boot会自动将其转换为HTTP 400 Bad Request响应。
ErrorController
处理错误页面:实现ErrorController
接口,创建一个错误处理控制器。在该控制器中,根据不同的异常类型返回不同的错误页面。例如:
@Controller
public class MyErrorController implements ErrorController {
@RequestMapping("/error")
public String handleError(HttpServletRequest request) {
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if (status != null) {
int statusCode = Integer.parseInt(status.toString());
if (statusCode == HttpStatus.NOT_FOUND.value()) {
return "404";
} else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
return "500";
}
}
return "error";
}
@Override
public String getErrorPath() {
return "/error";
}
}
这样,当发生异常时,Spring Boot会自动将请求重定向到/error
路径,由MyErrorController
处理并返回相应的错误页面。