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 ( ) 的 Grails 插件时,需要compile ":mongodb:1.2.0"
将默认id
类型更改为 type或。Long
String
ObjectId
Metric.groovy
import org.bson.types.ObjectId
class Metric {
static mapWith = "mongo"
ObjectId id
String title
}
但是,.get(1)
现在执行 a 将导致:
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 检索域对象的最简单方法是什么?