#java #android #json #google-app-engine #google-cloud-endpoints
#java #Android #json #google-app-engine #google-облако-конечные точки
Вопрос:
Цель: сгенерировать строку JSON из объекта Java, который использует аннотацию @jsonString внутри конечной точки Google.
СТРАТЕГИИ:
public class MyBean {
@JsonString private Long id;
...
String practicaJson = new Gson.toJson(myBean);
Ожидаемый результат:
{"id":"5658091668373504",...
Фактический результат:
{"id":5658091668373504,...
Контекст:
У меня есть приложение для Android и конечная точка Google Cloud. Компонент отправляется из конечной точки клиенту Android через HTTP-интерфейс конечной точки нормально. Теперь я пытаюсь иногда отправлять компонент через уведомления Firebase. Итак, мне нужно сгенерировать свою собственную строку json.
Фокус в том, что компонент в моем модуле конечной точки Google представляет собой простой класс Java, который я написал. Клиент Android получает сгенерированную версию этого компонента из библиотеки конечных точек Google. Этот сгенерированный компонент имеет аннотацию @jsonString. (Библиотека конечных точек Google делает это из-за проблемы с совместимостью JavaScript, которая меня не волнует.)
Итак, json, сгенерированный с помощью компонента на стороне конечной точки, несовместим с компонентом в клиенте Android. Казалось, простым решением было просто добавить аннотацию @jsonString в мой компонент конечной точки. Тем не менее, Gson, похоже, игнорирует аннотацию @jsonString.
Любые советы по решению проблемы генерации JSON приветствуются. Если есть более разумный способ отправлять один и тот же компонент / pojo иногда через HTTP-транспорт, а иногда через уведомления Firebase, я бы тоже хотел это услышать.
Ответ №1:
Если вам нужно:
{"id":"5658091668373504",...
вы должны изменить Long на String
@JsonString private String id;
При создании объекта вы можете использовать UUID Random для автоматической генерации идентификатора;
Комментарии:
1. Я не хочу менять свое поле с Long на String. Я забочусь о длинном типе в коде. Мне все равно, как это выглядит во время передачи. Аннотация @jsonString должна позаботиться об этом (или симметрично на клиенте и сервере не позаботиться об этом). Идентификаторы генерируются Objectify.