0

Ich habe eine Anwendung mit einer Microservices-Architektur entwickelt. Jeder Microservice ist eine Spring-Boot-Anwendung, die über die FeignClient-Schnittstelle mit anderen kommuniziert.Wie man Inter-Service-Ausnahme in einer Feder-basierten Microservices-Architektur korrekt behandelt

Lassen Sie A, ein Microservice (RestAPI), der Microservice B aufruft. Unter normalen Bedingungen antwortet B mit einem Objekt X, das ist die JSON-Antwort, die A Client bedient.

Aber, wenn B eine Ausnahme auslöst, erhalte ich eine chinesisch-Box Ausnahme an den Client wie folgt aus:

{ 
    "timestamp": 1511965051071, 
    "status": 500, 
    "error": "Internal Server Error", 
    "exception": "Exception", 
    "message": { "\"timestamp\":1511965051052,\"status\":422,\"error\":\"Unprocessable Entity\",\"exception\":\"java.lang.MyException\",\"message\":\"Error message from B\",\"path\":\"PATH-OF-B-SERVICE\"}", 
    "path": "PATH-OF-A-SERVICE" 
} 

Mit anderen Worten, MyException (Stand 422) "eingebettet" ist in A-Exception (Status 500).

würde Ich mag den Client mit dem inneren JSON antworten, das heißt:

{ 
    "timestamp": 1511965051052, 
    "status": 422, 
    "error": "Unprocessable Entity", 
    "exception": "java.lang.MyException", 
    "message": "ErrormessagefromB", 
    "path": "PATH-OF-B-SERVICE" 
} 

Wie kann ich das tun?

Antwort

0

Was this solution basiert auf der Kombination eines feign ErrorDecoder (Extrahieren, was Sie von feign Ausnahme benötigen) und eine Feder @ExceptionHandler (Dumps, was Sie in einem ResponseEntity<Object> müssen)?

Ich entschied mich für die Übersetzung der Fehler-Payload in eine, die generisch zu meiner API ist, aber eigentlich könnten Sie das gleiche beibehalten.

Verwandte Themen