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);
}
}
Bài viết liên quan
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).
Đọc bài viết →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).
Đọc bài viết →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).
Đọc bài viết →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).
Đọc bài viết →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).
Đọc bài viết →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).
Đọc bài viết →