S SmartDocs
Serie: Bridget java 66 righe · Aggiornato 2026-04-14

CommonExceptionHandler.java

Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/exception/CommonExceptionHandler.java

package com.checkout.payment.gateway.exception;

import com.checkout.payment.gateway.enums.PaymentStatus;
import com.checkout.payment.gateway.model.ErrorResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
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> handlePaymentException(EventProcessingException ex) {
    LOG.error("Payment not found: {}", ex.getMessage());
    return new ResponseEntity<>(new ErrorResponse("Payment not found"), HttpStatus.NOT_FOUND);
  }

  /**
   * Handle the errors from data validation
   * @param ex - MethodArgumentNotValidException thrown by Jakarta
   */
  @ExceptionHandler(MethodArgumentNotValidException.class)
  public ResponseEntity<ErrorResponse> handleValidationException(
      MethodArgumentNotValidException ex) {
    LOG.warn("Validation failed: {}", ex.getMessage());
    ErrorResponse errorResponse = new ErrorResponse(PaymentStatus.REJECTED.getName());
    for (ObjectError error : ex.getBindingResult().getAllErrors()) {
      errorResponse.getMessage().add(error.getDefaultMessage());
    }
    return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
  }

  /**
   * Handle the errors while calling acquiring bank
   */
  @ExceptionHandler(BankErrorException.class)
  public ResponseEntity<ErrorResponse> handleBankErrorException(BankErrorException ex) {
    LOG.error("Acquiring bank error: {}", ex.getMessage());
    ErrorResponse errorResponse = new ErrorResponse("Acquiring bank error");
    HttpStatus status = HttpStatus.resolve(ex.getStatusCode().value());
    if (status == HttpStatus.SERVICE_UNAVAILABLE) {
      errorResponse.getMessage().add("Bank service is currently unavailable");
    } else if (status == HttpStatus.BAD_GATEWAY) {
      errorResponse.getMessage().add("Acquiring bank returned a server error");
    } else if (status == HttpStatus.BAD_REQUEST) {
      errorResponse.getMessage().add("Request rejected by the acquiring bank");
    } else {
      errorResponse.getMessage().add("Unknown error happened when calling the bank");
    }
    return new ResponseEntity<>(errorResponse, ex.getStatusCode());
  }

  @ExceptionHandler(Exception.class)
  public ResponseEntity<ErrorResponse> handleException(Exception ex) {
    LOG.error("Exception happened", ex);
    return new ResponseEntity<>(new ErrorResponse("Server Error"), HttpStatus.INTERNAL_SERVER_ERROR);
  }

}

Articoli correlati

Bridget java Aggiornato 2026-03-30

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 →
Bridget java Aggiornato 2026-03-20

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 →
Bridget java Aggiornato 2026-03-30

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 →
Bridget java Aggiornato 2026-04-14

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 →
Bridget java Aggiornato 2026-03-20

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 →
Bridget java Aggiornato 2026-03-29

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 →