ApiExceptionHandler.java
Bridget/payment-gateway-microservices/services/payment-service/src/main/java/com/checkout/paymentgw/payment/exception/ApiExceptionHandler.java
package com.checkout.paymentgw.payment.exception;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestControllerAdvice
public class ApiExceptionHandler {
private static final Logger LOG = LoggerFactory.getLogger(ApiExceptionHandler.class);
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, Object>> validation(MethodArgumentNotValidException ex) {
List<String> messages = new ArrayList<>();
ex.getBindingResult().getAllErrors().forEach(e -> messages.add(e.getDefaultMessage()));
LOG.warn("validation failed: {}", messages);
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.body(Map.of("status", "REJECTED", "message", messages));
}
@ExceptionHandler(BankErrorException.class)
public ResponseEntity<Map<String, Object>> bank(BankErrorException ex) {
LOG.error("bank error status={} msg={}", ex.getStatusCode(), ex.getMessage());
String description = switch (ex.getStatusCode().value()) {
case 503 -> "Bank service is currently unavailable";
case 502 -> "Acquiring bank returned a server error";
case 400 -> "Request rejected by the acquiring bank";
default -> "Unknown error happened when calling the bank";
};
return ResponseEntity.status(ex.getStatusCode())
.body(Map.of("status", "FAILED", "message", List.of(description)));
}
@ExceptionHandler(Exception.class)
public ResponseEntity<Map<String, Object>> any(Exception ex) {
LOG.error("unhandled exception", ex);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(Map.of("status", "FAILED", "message", List.of("Server error")));
}
}
相關文章
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).
閱讀文章 →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).
閱讀文章 →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).
閱讀文章 →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).
閱讀文章 →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).
閱讀文章 →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).
閱讀文章 →