Play-Framework:无法将参数companyId解析为BSONObjectID:错误的ObjectId

时间:2016-06-23 09:40:28

标签: scala playframework-2.3 reactivemongo play-reactivemongo

我正在使用Play-framework和Reactive 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)

服务成功运行。我仍然没有得到实际问题。这是游戏框架问题,或者我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

首先重新实现QueryBindable,而播放插件已经提供了BSON:see sample

然后传递值"teams",这不是BSONObjectID的有效表示。