S SmartDocs
Chuỗi bài: Bridget java 48 dòng · Cập nhật 2026-05-08

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")));
    }
}

Bài viết liên quan

Bridget java Cập nhật 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).

Đọc bài viết →
Bridget java Cập nhật 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).

Đọc bài viết →
Bridget java Cập nhật 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).

Đọc bài viết →
Bridget java Cập nhật 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).

Đọc bài viết →
Bridget java Cập nhật 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).

Đọc bài viết →
Bridget java Cập nhật 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).

Đọc bài viết →