1

Reactive mongo 드라이버에서 play-framework을 사용하고 있습니다. 다음의 예와 같은 경로 PARAM로 내 ID가 경로 라우팅에서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 쉽게 매핑 우리의 루트 파일에 반응 몽고 BSONObjectId을 처리하기 위해, 나는 다음과 같은 바인더를 만드는 오전 내 요청 처리기 경로 매개 변수와 함께. 그러나 나는 다음과 같은 경로를 사용하고 때 아래 위의 경로 후 : 내가 BadRequest 다음 얻고있다

GET /company/detail  controllers.CompanyController.companyDetail 

:

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 하나가 이미 재생 플러그인에 의해 제공되는 반면 :

see sample은 그럼 당신은 BSONObjectID에 대한 올바른 표현하지 않은 값 "teams"을 전달합니다.