Einer meiner Dienste stellt einen REST-Endpunkt bereit, der intern einen anderen Dienst über gRPC aufruft, zum Beispiel:
Code: Select all
@GetMapping("/check/{productId}")
public ResponseEntity checkStock(@PathVariable String productId) {
CheckStockResponse body = inventoryClient.checkStock(productId);
return ResponseEntity.ok(body);
}
Wenn ich versuche, sie direkt zurückzugeben, erhalte ich den folgenden Serialisierungsfehler:
Code: Select all
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
No serializer found for class com.google.protobuf.UnknownFieldSet$Parser
and no properties discovered to create BeanSerializer
(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
(through reference chain: ...)
Was ist die beste Vorgehensweise für die Rückgabe einer gRPC-Antwort in einer REST-API?
Soll ich das von Protobuf generierte Objekt immer einem benutzerdefinierten DTO zuordnen?
Oder gibt es eine Möglichkeit, das Protobuf-Objekt ordnungsgemäß direkt in JSON zu serialisieren (z. B. mit Jackson oder Protobuf-Dienstprogramme)?
Das eigentliche Antwortobjekt ist ziemlich groß und verschachtelt, daher würde ich es vorziehen, wenn möglich eine manuelle Feld-für-Feld-Zuordnung zu vermeiden.
Mir geht es hauptsächlich um:
Saubere Trennung zwischen gRPC- und REST-Ebenen
Vermeidung von Serialisierungsproblemen
Leistung und Wartbarkeit
Mobile version