6

Grails を使用すると、ID でドメイン オブジェクトを簡単に取得できます (REST API の構築に便利です)。

リソースを取得するコントローラーは、次のように単純です。

MetricController.groovy

import grails.converters.JSON

class MetricController {

   def index() {
      def resource = Metric.get(params.id)
      render resource as JSON
      }

   }


MongoDB GORM ( compile ":mongodb:1.2.0") に Grails プラグインを使用する場合、デフォルトidのタイプをorに変更するLong 必要があります。StringObjectId

Metric.groovy

import org.bson.types.ObjectId

class Metric {
   static mapWith = "mongo"
   ObjectId id
   String title
   }


ただし、 を実行すると、次の.get(1)ようになります。

Error 500: Internal Server Error
URI
/bow/rest/metric/1
Class
java.lang.IllegalArgumentException
Message
invalid ObjectId [1]


私は推測して、コントローラーを使用するように変更しましたfindById

def resource = Metric.findById(new ObjectId(new Date(), params.id.toInteger()))

これでエラーは修正されましたが、オブジェクトが見つかりません (常に null を返します)。

たとえば、「-1387348672」の ID を使用しても、次のテスト オブジェクトは見つかりません。

{ "class" : "Metric",
  "id" : { "class" : "org.bson.types.ObjectId",
      "inc" : -1387348672,
      "machine" : 805582250,
      "new" : false,
      "time" : 1371329632000,
      "timeSecond" : 1371329632
    },
  "title" : "Test"
}


このObjectId.incフィールドは、リソース ID に使用する正しいフィールドではない場合もあります。

では、MongoDB を使用しているときに ID でドメイン オブジェクトを取得する最も簡単な方法は何でしょうか?

4

2 に答える 2