테이블 이름을 매개 변수로 사용하는 SELECT 메서드를 컨트롤러에 제공하고 SELECT 쿼리의 결과를 JSON으로 반환하고 싶습니다. 지금까지이 짓을 : tableObjectFactory
내 테이블 이름을 사용하고, 특정 유형의 TableQuery
을 반환Scala Slick : 쿼리 결과를 변수 테이블에 직렬화하는 방법
def specialSelect(tableName: String) = Action.async {
val tq: TableQuery[_] = tableObjectFactory(tableName)
val res: Future[Seq[_]] = db.run(tq.result)
res.map { p:Seq[_] => Ok(p.toJson) }
}
:
def tableObjectFactory(tableName: String): TableQuery[_] = {
tableName match {
case "users" => TableQuery[Users]
case "projects" => TableQuery[Projects]
}
}
AA 일반적인 Seq[_]
에 대해 정의 된 JSON 시리얼 라이저가 (이 없기 때문에 실패하는 경우 사실 _
은 Product with Serializable
이어야하며 도움이되는지 확실하지 않습니다.
테이블 이름은 미리 알지 못하며 (예 : "/special_select/<tableName>"
과 같은 URL에서 찾을 수 있습니다.) 각 테이블에 대해이를 구현할 수 없도록 120 개의 테이블이 있습니다.
어떤Seq[_]
를 직렬화하는 방법은 _
항상 슬릭 행 결과 (예를 들어, 경우 클래스 UsersRow
), 테이블이 어떤 것을 알고 있는가?
일반 DAO 및 ActiveSlick에 대해 읽었지만 지금까지해야하는지 잘 모르겠습니다.
각 사례 클래스는 필드의 수와 유형이 다를 수 있으므로 일반적인 Json 작성은 어렵습니다. 각 모델에 대해'implicit json format '을 제공하십시오. 'Json.format [User]'를 호출합니다. – pamu
Scala는'Seq [(Product with Serializable)]'또는 이와 비슷한 것을 볼 수 있기 때문에 각 행 객체에 대해 Json 포맷터가 제공하는 것을 신경 쓰지 않습니다. Json 포매터를 제공 한 사례 클래스가 지금까지 볼 수있는 유일한 클래스라는 것을 알 수 없습니다. – JulienD
맞지만 제품의 튜플 수는 전달하는 객체에 따라 다릅니다. 따라서 제품을 JSON으로 변환하는 방법을 설명 할 수있는 하나의 형식이있을 수 없습니다. 리플렉션을 사용하여 솔루션에서 사용해야합니다. Gson 라이브러리 – pamu