 <p>You're going to need a bit more than that, to get this accomplished ;) First of all, Slick requires a DB session, so that needs to be handled somewhere. Meaning a Slick Table <code>getAll</code> won't work by itself.</p> <p>I would do something like this (sorry, typing this up without an IDE, so it may not compile):</p> <pre><code>case class Person(...) object People extends Table[Person](PeopleDAO.table) { def * = ... } trait DAO[T] { val table: String def getAll: Seq[T] } object PeopleDAO extends DAO[Person] { override val table = "people" def getAll = { DB withSession { implicit session =&gt; Query(People).list } } } object Controller { def getTable(tableName: String) = Action { val dao: DAO[_] = tableName.toLowerCase match { case PeopleDAO.table =&gt; PeopleDAO case _ =&gt; throw new IllegalArgumentException("Not a valid table.") } Ok(Json.toJson(dao.getAll)) } } </code></pre>