4

MongoDBのインスタンスをクエリするRESTサービスから応答を取得し、その応答をJavaオブジェクトに解析しようとしています。Webサービスは、返される各レコードを改行文字で区切るMIMEタイプのhtmlで応答を返します(ただし、サービスが返すものを調整することはできます)。BSON応答をJavaオブジェクトに変換するための最も簡単で効率的な方法は何ですか?データを格納するためのテンプレートクラスをJavaですでに作成しました。

前もって感謝します!

編集:同僚が、Webサービス自体でMongoDB JavaドライバーのBSON解析ユーティリティを使用し、適切にフォーマットされたHTML文字列を返すことを提案しまし。これでも、アプリケーションで実行する解析が残りますが、当面は回避策として機能します。JavaオブジェクトへのBSON応答を簡単に逆シリアル化する方法をまだ探しています。

4

1 に答える 1

1

興味のある人のために、私は自分の問題の解決策を見つけました。BSON形式は、 GoogleのGSONドライバーを使用してJSONと同じように解析できることがわかりました。 私が対処しなければならなかった1つのトリッキーな部分は、ネストされたフィールドをテンプレートクラスに格納する方法を考え出すことでした。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
  }

上記のフレームワークに従ってテンプレートクラスを宣言することで、GSONライブラリの数行のコードを使用してMongoDBのフォーマットを簡単に解析できました。MongoのBSON応答で各ドキュメントを分離するために、Webサービスからデータを返すときに各エントリに「\n」を連結したことに注意してください。

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();
}
于 2011-06-01T13:51:30.730 に答える