1

Я использую play-framework с реактивными драйверами mongo. Для обработки реактивных Монго BSONObjectId в нашем файле маршрутов, я создаю следующее связующие:Play-Framework: не удается проанализировать параметр companyId как BSONObjectID: неверно ObjectId

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) 

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

ответ

2

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

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