Одна из моих служб предоставляет конечную точку REST, которая внутренне вызывает другую службу через gRPC, например:
Код: Выделить всё
@GetMapping("/check/{productId}")
public ResponseEntity checkStock(@PathVariable String productId) {
CheckStockResponse body = inventoryClient.checkStock(productId);
return ResponseEntity.ok(body);
}
Когда я пытаюсь вернуть его напрямую, я получаю следующую ошибку сериализации:
Код: Выделить всё
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: ...)
Как лучше всего возвращать ответ gRPC в REST API?
Должен ли я всегда сопоставлять объект, созданный protobuf, с пользовательским DTO?
Или есть ли способ правильно сериализовать объект protobuf непосредственно в JSON (например, с помощью Jackson или утилиты Protobuf)?
Фактический объект ответа довольно большой и вложенный, поэтому я бы предпочел избегать ручного сопоставления полей, если это возможно.
Меня в основном беспокоят:
Четкое разделение между слоями gRPC и REST
Избежание проблем сериализации
Производительность и ремонтопригодность
Подробнее здесь: https://stackoverflow.com/questions/797 ... api-serial
Мобильная версия