1

Ich verwende Play-Framework mit Reactive Mongo-Treibern. Für reaktive Mongo BSONObjectId in unserer Routen-Datei Handhabung erschaffe ich folgende Bindemittel:Play-Framework: Parameter companyId kann nicht als BSONObjectID analysiert werden: falsche 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)) 
} 

In Routing bin ich leicht Route meiner ID als Pfad param wie folgendes Beispiel:

GET  /company/:companyId/users-detail  controllers.CompanyController.userDetail(companyId: BSONObjectID) 

Meine BSONObjectId leicht kartiert mit meiner Anfrage Handler Pfadparam. Aber wenn ich verwende folgende Route nach oben Route wie folgt:

GET /company/detail  controllers.CompanyController.companyDetail 

ich immer bin nach BadRequest:

For request 'GET /company/detail?t=1466673779753' [Cannot parse parameter companyId as BSONObjectID: wrong ObjectId: 'teams'] 

Aber wenn ich wechseln die Routen wie folgt:

GET /company/detail  controllers.CompanyController.companyDetail 
GET  /company/:companyId/users-detail  controllers.CompanyController.userDetail(companyId: BSONObjectID) 

Dienstleistungen erfolgreich ausgeführt werden. Ich verstehe immer noch nicht, was das eigentliche Problem ist. Das ist Play-Framework-Problem, oder etwas mit meinem Code falsch?

Antwort

2

Zuerst neu implementieren eine QueryBindable, während die BSON man schon von der Play-Plugin zur Verfügung gestellt: see sample

Dann übergeben Sie den Wert "teams", die für BSONObjectID keine gültige Darstellung ist.