#mongodb #scala #spray #salat
#mongodb #scala #распыление #salat
Вопрос:
У меня проблема с библиотекой Salat в scala — у меня есть элемент класса case:
case class Item(_id: ObjectId = new ObjectId, var name: String, var active: Boolean) extends WithId {
override def id: Option[ObjectId] = Some(_id)
}
Поле _id создается при создании экземпляра элемента.
Я пытаюсь протестировать функциональность вставки элемента следующим образом:
var itemObj = Item(name = "testItem", active = true)
"MainService" should {
"put an item into database" in {
Put("/items/", itemObj) ~> mainRoute ~> check {
val item = responseAs[Item]
item.name === "testItem"
item.active === true
item._id === itemObj._id
Item.findAll().toList.size === 1
}
}
}
Где PUT /items/ mapping соответствует распределенному HTTP-маршруту:
put {
entity(as[Item]) { item ⇒
complete {
Item.saveOrUpdate(item)
logger.info("putting item {}", item)
HttpResponse(
StatusCodes.OK,
HttpEntity(ContentTypes.`application/json`, grater[Item].toCompactJSON(item))
)
}
}
}
И определение saveOrUpdate выглядит следующим образом:
def saveOrUpdate(t: T) = {
t.id match {
case Some(id) => dao.update(MongoDBObject("_id" -> id), t, false, false, new WriteConcern)
case None => dao.insert(t)
}
Теперь дело в том, что тест завершается неудачей при утверждении
item._id === itemObj._id
Я понятия не имею, почему _id изменится, если я настраиваю его перед выполнением сохранения или обновления объекта.
Есть ли у кого-нибудь какие-нибудь идеи, почему это так действует и что я могу сделать, чтобы исправить это?
Лучший, Марчин
Ответ №1:
Я изменил библиотеку JSON с json4s на Spray Json, и, похоже, теперь она работает.