CommonExceptionHandler.java
Bridget/payment_solutions/src/main/java/com/checkout/payment/gateway/exception/CommonExceptionHandler.java
package com.checkout.payment.gateway.exception;
import com.checkout.payment.gateway.model.ErrorResponse;
import io.github.resilience4j.circuitbreaker.CallNotPermittedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class CommonExceptionHandler {
private static final Logger LOG = LoggerFactory.getLogger(CommonExceptionHandler.class);
@ExceptionHandler(EventProcessingException.class)
public ResponseEntity<ErrorResponse> handleEventProcessingException(EventProcessingException ex) {
LOG.error("Payment not found", ex);
return new ResponseEntity<>(new ErrorResponse(ex.getMessage()), HttpStatus.NOT_FOUND);
}
@ExceptionHandler(BankServiceException.class)
public ResponseEntity<ErrorResponse> handleBankServiceException(BankServiceException ex) {
LOG.error("Bank service error", ex);
return new ResponseEntity<>(
new ErrorResponse("Payment processing failed: bank service unavailable"),
HttpStatus.BAD_GATEWAY);
}
@ExceptionHandler(IdempotencyConflictException.class)
public ResponseEntity<ErrorResponse> handleIdempotencyConflict(IdempotencyConflictException ex) {
LOG.warn("Idempotency conflict: {}", ex.getMessage());
return new ResponseEntity<>(new ErrorResponse(ex.getMessage()), HttpStatus.CONFLICT);
}
@ExceptionHandler(RateLimitExceededException.class)
public ResponseEntity<ErrorResponse> handleRateLimit(RateLimitExceededException ex) {
LOG.warn("Rate limit exceeded: {}", ex.getMessage());
return new ResponseEntity<>(new ErrorResponse(ex.getMessage()), HttpStatus.TOO_MANY_REQUESTS);
}
@ExceptionHandler(CallNotPermittedException.class)
public ResponseEntity<ErrorResponse> handleCircuitOpen(CallNotPermittedException ex) {
LOG.warn("Circuit breaker open for bank client");
return new ResponseEntity<>(
new ErrorResponse("Bank temporarily unavailable (circuit open)"),
HttpStatus.SERVICE_UNAVAILABLE);
}
}
Articoli correlati
PaymentGatewayApplication.java
PaymentGatewayApplication.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/PaymentGatewayApplication.java).
Leggi l'articolo →ApplicationConfiguration.java
ApplicationConfiguration.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/configuration/ApplicationConfiguration.java).
Leggi l'articolo →RequestResponseLogger.java
RequestResponseLogger.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/configuration/RequestResponseLogger.java).
Leggi l'articolo →PaymentGatewayController.java
PaymentGatewayController.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/controller/PaymentGatewayController.java).
Leggi l'articolo →PaymentStatus.java
PaymentStatus.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/enums/PaymentStatus.java).
Leggi l'articolo →BankErrorException.java
BankErrorException.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/exception/BankErrorException.java).
Leggi l'articolo →