В платформе Play я использую Slick с базой данных MySQL, как я могу преобразовать результат запроса (Future [Seq [SomeClass]]) в Json для дальнейшего использования в автозаполнении jQuery. Я могу сериализовать SomeClass, но где я должен использовать .map (или что-то еще)?Как преобразовать будущее [Seq [SomeClass]] в Json?
Добавлено:
Модель:
package models
import play.api.libs.json._
case class Equipment(id: Long, name: String,area: String,kiMin: Double,kiMax: Double,cosFiMin: Double,cosFiMax: Double){
implicit val equipmentWrites = new Writes[Equipment] {
def writes(equipment: Equipment) = Json.obj(
"id" -> equipment.id,
"name" -> equipment.name,
"area" -> equipment.area,
"kiMin" -> equipment.kiMin,
"kiMax" -> equipment.kiMax,
"cosFiMin" -> equipment.cosFiMin,
"cosFiMax" -> equipment.cosFiMax
)
//also tried this for Seq
/* def writes(equipment: Equipment): JsValue = {
val equipmentSeq = Seq(
"id" -> JsNumber(equipment.id),
"name" -> JsString(equipment.name),
"area" -> JsString(equipment.area),
"kiMin" -> JsNumber(equipment.kiMin),
"kiMax" -> JsNumber(equipment.kiMax),
"cosFiMin" -> JsNumber(equipment.cosFiMin),
"cosFiMax" -> JsNumber(equipment.cosFiMax)
)
JsObject(equipmentSeq)
}*/
}
}
Контроллер:
def auto(term: String) = Action {
Ok(Json.toJson(equipmentDAO.get(term)))
}
DAO:
def get(name: String): Future[Seq[Equipment]] = db.run((equipment.filter { _.name === name }).result)
Added2: метод
контроллер:
def auto(term: String) = Action.async {
val future: Future[Seq[Equipment]] = equipmentDAO.get(term)
future.map { seqOfSomeClass =>
Ok(Json.toJson(seqOfSomeClass))
}
}
Serializer:
implicit val equipmentWrites: Writes[Equipment] = (
(JsPath \ "id").write[Long] and
(JsPath \ "name").write[String] and
(JsPath \ "area").write[String] and
(JsPath \ "kiMin").write[Double] and
(JsPath \ "kiMax").write[Double] and
(JsPath \ "cosFiMin").write[Double] and
(JsPath \ "cosFiMax").write[Double]
)(unlift(Equipment.unapply))
Более подробная информация необходима. Вы используете Play JSON, верно? Когда вы говорите «сериализовать SomeClass», вы подразумеваете сериализацию в JSON, правильно? Где это преобразование должно быть сделано? В игровом контроллере? Не могли бы вы отправить код контроллера? – virsox
@ virsox, добавил некоторую информацию, не понимаю, что такое Play JSON framework Я использую Play 2.5, он включает Json, ответ на другие вопросы - «да». –
Не пытайтесь «разгадать» 'Future [T]', но parse 'T' внутри' 'Future' – cchantep