Я пытаюсь использовать gemfire rest api с собственным клиентом gemfire.Что у меня работает:
- crud для моего объекта через собственный клиент
- извлечение и удаление того же объекта через rest api
Когда я пытаюсьвыполнить создание / обновление через rest api с помощью @type
и затем попытаться получить его через собственный клиент gemfire. Я получаю
"com.gemstone.gemfire.pdx.internal.PdxInstanceImpl, к которому невозможно привести...
Я проверил документы: https://gemfire.docs.pivotal.io/95/geode/rest_apps/rest_prereqs.html и:
Для обеспечения совместимости между клиентами GemFire Java (или собственными клиентами GemFire) и клиентами REST,должны соблюдаться следующие правила:
- Все Java-классы GemFire и собственные клиентские классы, работающие с данными, доступ к которым также осуществляется через интерфейс REST, должны быть сериализованы в PDX либо с помощью автосериализации PDX, либо с помощью реализации PdxSerializable.
- Java-клиенты GemFire и собственные клиенты могут извлекать данные с поддержкой REST либо в виде PdxInstance, либо в качестве фактического объекта с помощью метода PdxInstance.getObject. Если вы используете последний метод, высначала необходимо объявить тип объекта (@type) в полезной нагрузке запроса POST или PUT при создании объекта в REST;и во-вторых, у клиента Java должен быть фактический класс домена в его CLASSPATH.
Я вижу, что в моем случае работает автосериализация PDX.Поэтому я выполняю запрос на создание / обновление.Но @type
не обрабатывается, как я ожидал.
У меня есть версия gemfire 8.2.0
Мое единственное решение - реализовать PdxSerializable
?
Базовый примериз того, что я делаю:
Мой объект Person имеет поля: id, name.Он расположен по адресу com.package
.
- Я сохраняю свой объект с помощью собственного клиента gemfire.
- Я выполняю Http
PUT
запрос /gemfire-api/v1/{region}/{key}
с полезной нагрузкой: '{ "@type":"com.package.Person", "id":"someId", "name":"name" }'
- Я пытаюсь получить его с помощью HTTP GET - успешно
- Я пытаюсь получить его с помощью собственного клиента gemfire и привести его к объекту Person с
getObject()
- у меня ошибка