Plya2-Scala/controller/イロイロな出力

Plya2-Scala/controller/イロイロな出力

Play2-Scala 2.3

Action の内部実装は非常に巧妙で複雑なので理解するのは大変。なので Play はこういうもんなんだとおぼえてしまって割りきったほうがよい。

単純にテキストを出力

  def myText = Action {
    Ok("Hello World")
  }

XML を出力

  def myXml = Action {
    Ok(<hoge>ほげ</hoge>)
  }

ScalaにはXMLリテラルがある

XML を HTML として出力

  def myXmlAsHtml = Action {
    Ok(<h1>ほげ</h1>).as(ContentTypes.HTML)
  }

このレスポンスのコレクションは play.api.http.ContentTypes に定義されているのでここを起点に書けば間違いはないだろう。サンプルとかだと端折っていきなり書いていることがおおいのでね。

任意のコンテンツタイプを指定して出力

  def myTextAsMyContentType = Action {
    Ok("hogehoge").as("hoge/piyo")
  }

ヘッダーを付加して出力

  def myTextAppendHeader = Action {
    Ok("hogehoge").withHeaders((HeaderNames.CACHE_CONTROL, "max-age=3600"))
  }

括弧はタプルリテラル

  def myCookie = Action {
    Ok("hogehoge").withCookies(
        Cookie("hoge", "ほげ"),
        Cookie("piyo", "ぴよ")
    )
  }
  def myDelCookie = Action {
    Ok("hogehoge").discardingCookies(DiscardingCookie("hoge"))
  }

301 で特定のURLへリダイレクトする

  def myRedirect = Action {
    Results.MovedPermanently("http://www.yahoo.co.jp")
  }

特定の自分のコントローラーへリダイレクトする

  def myRedirectToMyText = Action {
    Redirect(routes.hoge.mytext())
  }

400 BadRequest を返す

  def myBadRequest = Action {
    Results.BadRequest("Bad!")
  }

403 Forbidden を返す

  def myForbidden = Action {
    Results.Forbidden("Forbidden")
  }

404 Not Found を返す

  def myNotFound = Action {
    Results.NotFound("Not Found")
  }

500 InternalServerError を返す

  def myInternalServerError = Action {
    Results.InternalServerError("InternalServerError")
  }

任意のステータスコードを返す

  def myStatus = Action {
    Results.Status(999)
  }

View を使って出力する

  def myViewSimple = Action {
    Ok(views.html.MyView.simple())
  }

View を使って出力するパラメータ付き

  def myViewParams = Action {
    Ok(views.html.MyView.params(title = "aaaaaaaaaaaaaa", body = "bbbbbbbbbb"))
  }

出力の分岐方法

こういう場合はOKだけどこの場合は500とかそういう Action 内での分岐するやり方。 Java とは違うので注意が必要な部分である。

Scala の流儀として return を書かないというものがある。 メソッドの最後の評価値を return とするのが定石。 つまり return を書かない。つまりメソッドを途中で中断しないということである。

やればわかるが Action の途中で return を書くとその戻りの型記述を強制されるのだが、これがどう指定してもシンプルにならない。

なので途中結果を控えておいて、メソッドの最後に match で分岐するのが Scala のやり方である。

play_framework/play2_scala/controller/various_output.txt · 最終更新: 2017-10-02 16:35 by ore