我正在使用带有反应式 mongo 驱动程序的播放框架。为了在我们的路由文件中处理反应式 mongo BSONObjectId
,我正在创建以下活页夹:
object StringToBSONObjectIdBinder {
/* This is for Path Parameter*/
implicit object pathBindableBSONObjectID extends play.api.mvc.PathBindable.Parsing[BSONObjectID](
BSONObjectID(_), _.stringify,
(key: String, e: Exception) =>
"Cannot parse parameter %s as BSONObjectID: %s".format(key, e.getMessage))
/* This is for query String*/
implicit object queryStringBindableBSONObjectID extends play.api.mvc.QueryStringBindable.Parsing[BSONObjectID](
BSONObjectID(_), _.stringify,
(key: String, e: Exception) =>
"Cannot parse parameter %s as BSONObjectID: %s".format(key, e.getMessage))
}
在路由中,我很容易将我的 id 路由为路径参数,如下例所示:
GET /company/:companyId/users-detail controllers.CompanyController.userDetail(companyId: BSONObjectID)
我BSONObjectId
很容易用我的请求处理程序路径参数映射。但是当我在上述路线之后使用以下路线时,如下所示:
GET /company/detail controllers.CompanyController.companyDetail
我得到以下信息BadRequest
:
For request 'GET /company/detail?t=1466673779753' [Cannot parse parameter companyId as BSONObjectID: wrong ObjectId: 'teams']
但是当我如下切换路线时:
GET /company/detail controllers.CompanyController.companyDetail
GET /company/:companyId/users-detail controllers.CompanyController.userDetail(companyId: BSONObjectID)
服务成功运行。我仍然不知道实际问题是什么。这是播放框架问题,还是我的代码有问题?