在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
處理并返回相應的錯誤頁面。