Я создаю Rest API с распылением на вершине mongodb для некоторых операций CRUD, все это прекрасно работает, ожидайте всякий раз, когда я пытаюсь проверить его со спецификациями2 следующую спецификациюHowto test Custom Json Objects with Spray Routing
class RestServiceSpec extends Specification with Specs2RouteTest with RoutingRestService
// database initialization removed for clarity
"The rest service" should
"have a player called 'Theo TestPlayer' in the db" in {
Get("/api/1.0/player/" + player1._id) ~> restRoute ~> check {
entityAs[Player] must be equalTo(player1)
}
}
}
// some more specs removed for clarity
}
он потерпит неудачу со следующей ошибкой:
MalformedContent(invalid ObjectId ["51308c134820cf957c4c51ca"],Some(java.lang.IllegalArgumentException: invalid ObjectId ["51308c134820cf957c4c51ca"])) (Specs2Interface.scala:25)
Я понятия не имею, где искать, как ссылки на исходный файл и линии номер точки к общей failTest (тзд: String) метод
некоторые подробнее:
У меня есть случай класс, который я упорствовать в Монго, используя SalatDAO
case class Player(@Key("_id") _id:ObjectId = new ObjectId(), name:String, email:String, age:Int) {}
где ObjectId() класса является то, что оборачивает поколение ID MongoDB в , чтобы получить это (не) выстроил через spray_json Я создал несколько jsonFormats
object MyJsonProtocol {
implicit val objectIdFormat = new JsonFormat[ObjectId] {
def write(o:ObjectId) = JsString(o.toString)
def read(value:JsValue) = new ObjectId(value.toString())
}
implicit val PlayerFormat = jsonFormat(Player, "_id", "name", "email", "age")
и соответствующую часть моего маршрута (обработки удалены ошибки и протоколирования):
path("player"/"\\w+".r) {id:String =>
get {
respondWithMediaType(`application/json`) {
complete {
PlayerCRUD.getById(id)
}
}
} ~
Спасибо , У меня была такая же проблема, и мне удалось решить ее, прочитав ваш вопрос и ответ :) – Marcin