Десериализация MongoDB BSON - PullRequest
4 голосов
/ 26 мая 2011

Я пытался получить ответ от службы REST, которая запрашивает экземпляр MongoDB, и проанализировать ответ в объекте Java. Веб-сервис возвращает ответ в виде HTML-кода MIME с символом новой строки, разделяющим каждую возвращаемую запись (хотя у меня есть возможность настроить то, что возвращает служба). Какой самый простой / эффективный способ преобразования ответа BSON в объект Java? Я уже создал шаблонный класс в Java для хранения данных.

Заранее спасибо!

edit: коллега предложил мне использовать утилиту синтаксического анализа BSON драйвера MongoDB Java в самой webservice , а затем вернуть красиво отформатированную строку HTML. Это все еще оставляет мне возможность выполнять анализ в моем приложении, но пока будет работать как обходной путь. Все еще ищу способ легко десериализовать ответ BSON на объект Java.

1 Ответ

1 голос
/ 01 июня 2011

Для тех, кто заинтересован, я нашел решение своей проблемы. Оказывается, что формат BSON можно анализировать так же, как и JSON, используя драйвер GSON от Google. Одна сложная часть, с которой мне пришлось столкнуться, заключалась в поиске способа хранения вложенных полей в моем шаблонном классе. Способ разрешить GSON анализировать вложенные документы - объявить статические внутренние классы в вашем шаблонном классе. Вот пример:

public BSONObject {
   // Private fields
   private int foo;
   private String bar;

  // Constructors
  public BSONObject() {}

  // Static inner subclasses
  private Widget widget;
  private Duck quack;

  // Getters & Setters for outer class
  public int getFoo() {...}
  public String getBar() {...}
  public Widget getWidget() {...}
  public Duck getDuck() {...}

  // Static inner class declarations
  public static Widget {
     // include vars & getters/setters
  }

и т.д.

Объявление класса шаблона в соответствии с вышеуказанной платформой позволило мне легко разобрать форматирование MongoDB, используя несколько строк кода из библиотеки GSON. Обратите внимание, что я объединял "\ n" для каждой записи при возврате данных из моего веб-сервиса, чтобы отделить каждый документ в ответе BSON Монго:

public String getNestedField() {
   Gson gson = new Gson();
   String [] split = response.split("\n");
   JsonParser p = new JsonParser();
   String json = split[0];
   BSONObject b = gson.fromJson(p.parse(json), BSONObject.class);
   return b.getWidget().getField();
}
...