Play에서 쿼리 문자열을 case class (자신 유형, 모든 객체)로 수신
6610 단어 PlayScalaPlayFrameworkPlay2
배열로 받는 기사를 쓸 때의 조사 것 중에서의 생각으로.
- Play에서 쿼리 문자열을 배열 (List) 또는 모든 유형으로받습니다.
소스 코드
만든 소스의 동작 사양적인 것
다음과 같은 쿼리에서 Cells 객체에 바인딩합니다.
쿼리 문자열
?cells.colums=4&cells.rows=5
셀 정의
Cells.scalacase class Cells(columns: Int, rows: Int)
그리기
받은 셀의 열을 열, 행을 행으로 '■'를 그립니다.
다음과 같은 쿼리에서 Cells 객체에 바인딩합니다.
쿼리 문자열
?cells.colums=4&cells.rows=5
셀 정의
Cells.scala
case class Cells(columns: Int, rows: Int)
그리기
받은 셀의 열을 열, 행을 행으로 '■'를 그립니다.
소스 코드의 포인트 발췌
QueryStringBindable의 확장 부분
Cells.scalaobject Cells {
implicit def queryStringBinder(implicit intBinder: QueryStringBindable[Int]) = new QueryStringBindable[Cells] {
val columnsKey = "columns"
val rowsKey = "rows"
override def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String, Cells]] = {
for {
columns <- intBinder.bind(s"$key.$columnsKey", params)
rows <- intBinder.bind(s"$key.$rowsKey", params)
} yield {
(columns, rows) match {
case (Right(c), Right(r)) => Right(Cells(c, r))
case _ => Left(s"cell's columns and rows must be Integer.")
}
}
}
override def unbind(key: String, cells: Cells): String = s"${intBinder.unbind(s"$key.$columnsKey", cells.columns)}&${intBinder.unbind(s"$key.$rowsKey", cells.rows)}"
}
}
포인트
object Cells {
implicit def queryStringBinder(implicit intBinder: QueryStringBindable[Int]) = new QueryStringBindable[Cells] {
val columnsKey = "columns"
val rowsKey = "rows"
override def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String, Cells]] = {
for {
columns <- intBinder.bind(s"$key.$columnsKey", params)
rows <- intBinder.bind(s"$key.$rowsKey", params)
} yield {
(columns, rows) match {
case (Right(c), Right(r)) => Right(Cells(c, r))
case _ => Left(s"cell's columns and rows must be Integer.")
}
}
}
override def unbind(key: String, cells: Cells): String = s"${intBinder.unbind(s"$key.$columnsKey", cells.columns)}&${intBinder.unbind(s"$key.$rowsKey", cells.rows)}"
}
}
routes
GET / controllers.TestController.index(cells: controllers.request.query.Cells)
감상·비고 등
본질적인 내용이 아니기 때문에 이번에는 수정하지 않고. . .
참고로 한 것
Play 2.x QueryStringBindable, PathBindable 정보
공식 문서 -
Reference
이 문제에 관하여(Play에서 쿼리 문자열을 case class (자신 유형, 모든 객체)로 수신), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tyahha/items/fed85c872808fcd16243
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Play에서 쿼리 문자열을 case class (자신 유형, 모든 객체)로 수신), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tyahha/items/fed85c872808fcd16243텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)