play是一个非常好的框架 希望他可以发展的更好
该文档是我自己学习的时候翻译的,可能有的地方有曲解,有翻译的不对的地方,希望大家可以共同提出,共同进步,谢谢
创建一个action的几种方式:
1、第一种最简单的方式,一个有返回值的代码块
Action {
Ok("Hello world")
}
2、第一种没有涉及到request的使用,但是在http开发中request的是非常有用的,所以我们可以通过request=>来引入
request
Action { request =>
Ok("Got request [" + request + "]")
}
3、我们可以将Action拆分,通过隐式转换的方式去使用request
def action = Action { implicit request =>
anotherMethod("Some para value")
Ok("Got request [" + request + "]")
}
def anotherMethod(p: String)(implicit request: Request[_]) = {
// do something that needs access to the request
}
4、最后一种方式,可以指定一个特定(specify)的额外参数参数
Action(parse.json) { implicit request =>
Ok("Got request [" + request + "]")
}
controller创建(生成)多个action:
controller和其他的类没有什么不同,就是在controller中创建了多个Action,controller利用依赖注入来创建controller类
1.最简单的例子定义一个action生产者,就是一个无参的方法,这个方法返回一个Action
package controllers
import javax.inject.Inject
import play.api.mvc._
class Application @Inject()
(cc: ControllerComponents)
extends AbstractController(cc) {
def index = Action {
Ok("It works!")
}
}
2.当然我们可以获取并捕捉到参数,对其进行处理
def hello(name: String) = Action {
Ok("Hello " + name)
}
简单的返回值
现在我们了解一下简单的Play的返回值,这个Results是有header和body组成的,header有一个状态值和一个set这两个值来保存,这个返回值类是play.api.mvc.Result
import play.api.http.HttpEntity
def index = Action {
Result(
header = ResponseHeader(200, Map.empty),
body = HttpEntity.Strict(ByteString("Hello world!"), Some("text/plain"))
)
}
有以下几个常用的Result
Ok("Hello world!")
NotFound
NotFound(<h1>Page not found</h1>)
BadRequest(views.html.form(formWithErrors))
InternalServerError("Oops")
Status(488)("Strange response type")
Ok和NotFound这些都是返回一个Status,这个是Status继承了Result
接口文档地址https://www.playframework.com/documentation/2.6.x/api/scala/index.html#play.api.mvc.Results
重定向
def index = Action {
Redirect("/user/home")
}
默认的重定向的状态码是303,我们也可以指定特定的状态码
def index = Action {
Redirect("/user/home", MOVED_PERMANENTLY)
}