【问题标题】:Scala write collection of objects to HttpResponseScala 将对象集合写入 HttpResponse
【发布时间】:2016-10-31 17:24:08
【问题描述】:

我是 scala 初学者,现在我正在尝试构建一个基本的 play/slick 应用程序(一种用户数据库)。

似乎我已经能够构建所有东西,但数据传输到前端。

这是我所拥有的:

UserDAO.scala

class UserDao @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends BaseDao {
  import driver.api._

  def entities = TableQuery[UsersTable]

  def all(): Future[Seq[User]] = {
    db.run(entities.result)
  }

  class UsersTable(tag: Tag) extends BaseTable(tag, "USER") {
    def email = column[String]("email")
    def password = column[String]("password")
    def * = (id, email, password) <> (User.tupled, User.unapply)
  }
}

Application.scala

Application @Inject()(userDAO: UserDao) extends Controller {
  def users = Action.async {
    val userList = userDAO.all()
    userList
      .map { list => Ok(list.map(elem => Json.toJson(elem : UserDto))) }
      .recover { case _ => InternalServerError }
  }
}  

UserDTO.scala

case class UserDto(id: Long, login: String)

object UserDto {
  implicit val userWriter = Json.writes[UserDto]

  implicit def from(user: User): UserDto = UserDto(user.id, user.login)
}

我不明白为什么编译器会在 Application.scala 中抱怨 .map { list =&gt; Ok(list.map(elem =&gt; Json.toJson(elem : UserDto))) }。看来我提供了转换为json 所需的一切。可以请任何人指出我做错了什么吗?

【问题讨论】:

  • 试试Json.toJson(list)。您似乎正在尝试返回 JSON 对象列表而不是 json 数组。

标签: scala playframework slick


【解决方案1】:

将Ok(list.map(elem =&gt; Json.toJson(elem : UserDto))) 替换为Json.toJson(list: Seq[UserDto])

Application @Inject()(userDAO: UserDao) extends Controller {
  def users = Action.async {
    val userList = userDAO.all()
    userList
      .map { list => Ok(Json.toJson(list: Seq[UserDto])) }
      .recover { case _ => InternalServerError }
  }
}  

【讨论】:

  • 非常感谢你,帕姆!只是想知道,我们可以使用隐式转换来消除显式的from 函数使用吗?
  • @mr.nothing 我认为implicit def 在这种情况下不会被自动提取
  • @mr.nothing 只是添加它以确保安全。
  • @mr.nothing 是的..只要检查一下...隐式将被拾取
  • @mr.nothing implicit 将被领取
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 2011-06-13
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多