Генерировать JSON в конечной точке Google с аннотацией @jsonString

#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.