Play-Framework: невозможно проанализировать параметр companyId как BSONObjectID: неверный ObjectId

Я использую play-framework с реактивными драйверами 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))
}

В маршрутизации я легко маршрутизирую свой идентификатор как параметр пути, как в следующем примере:

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)

Службы работают успешно. Я до сих пор не понимаю, в чем проблема. Это проблема игровой платформы или что-то не так с моим кодом?


person Harmeet Singh Taara    schedule 23.06.2016    source источник


Ответы (1)


Сначала вы повторно реализуете QueryBindable, тогда как BSON уже предоставлен плагином Play: см. пример

Затем вы передаете значение "teams", которое не является допустимым представлением для BSONObjectID.

person cchantep    schedule 23.06.2016