使用自定义检查型异常处理业务错误,如余额不足或订单不可取消,通过Service层抛出异常、Controller统一捕获或使用@ControllerAdvice全局处理,提升代码可读性与用户体验。

在Java中,使用Exception处理业务逻辑错误是一种常见且有效的方式,但关键在于合理设计和使用异常,避免滥用。直接用异常控制流程是不推荐的,但通过自定义异常明确表达业务问题,能提升代码可读性和维护性。
Java中的异常分为检查型异常(checked)和非检查型异常(unchecked)。对于业务逻辑错误,建议创建自定义的检查型异常,强制调用方处理。
例如,用户余额不足、订单状态不允许取消等场景,可以定义:
public class InsufficientBalanceException extends Exception {
public InsufficientBalanceException(String message) {
super(message);
}
}
在服务方法中抛出:
立即学习“Java免费学习笔记(深入)”;
public void withdraw(double amount) throws InsufficientBalanceException {
if (amount > balance) {
throw new InsufficientBalanceException("余额不足");
}
balance -= amount;
}
业务逻辑通常集中在Service层,这里应负责判断条件并抛出有意义的异常。
Controller层通过try-catch或全局异常处理器(@ControllerAdvice)统一响应错误。
示例:
@Service
public class OrderService {
public void cancelOrder(Long orderId) throws OrderCannotCancelException {
Order order = orderRepository.findById(orderId);
if (!"PENDING".equals(order.getStatus())) {
throw new OrderCannotCancelException("订单状态不可取消");
}
order.setStatus("CANCELLED");
}
}
Controller中调用:
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
@PostMapping("/orders/{id}/cancel")
public ResponseEntity<String> cancelOrder(@PathVariable Long id) {
try {
orderService.cancelOrder(id);
return ResponseEntity.ok("取消成功");
} catch (OrderCannotCancelException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
}
}
使用@ControllerAdvice集中处理所有业务异常,减少重复代码。
定义全局异常处理器:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(InsufficientBalanceException.class)
public ResponseEntity<String> handleBusinessError(Exception e) {
return ResponseEntity.status(400).body(e.getMessage());
}
}
这样Controller中无需写try-catch,Service抛出异常会自动被拦截并返回友好提示。
基本上就这些。关键是把业务规则验证和异常抛出放在合适位置,用自定义异常明确语义,再通过统一机制返回给前端。这样做既保持了代码清晰,又提升了用户体验。
以上就是在Java中如何使用Exception处理业务逻辑错误的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号