Как лучше всего вернуть ответ gRPC в REST API Spring Boot (ошибка сериализации с protobuf)?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как лучше всего вернуть ответ gRPC в REST API Spring Boot (ошибка сериализации с protobuf)?

Сообщение Anonymous »

Я использую Spring Boot с gRPC для внутренней связи между службами.
Одна из моих служб предоставляет конечную точку REST, которая внутренне вызывает другую службу через gRPC, например:

Код: Выделить всё

@GetMapping("/check/{productId}")
public ResponseEntity checkStock(@PathVariable String productId) {
CheckStockResponse body = inventoryClient.checkStock(productId);
return ResponseEntity.ok(body);
}
CheckStockResponse — это класс, созданный из файла .proto.
Когда я пытаюсь вернуть его напрямую, я получаю следующую ошибку сериализации:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»