使用Play Framework获取请求参数?

use*_*833 25 java playframework-2.0

我正在学习游戏框架,并了解我可以映射请求,例如/manager/user:

  GET      /manage/:user    Controllers.Application.some(user:String)
Run Code Online (Sandbox Code Playgroud)

我如何映射请求/play/video?video_id=1sh1

bie*_*ior 24

你至少有两种可能,让我们称他们approach1approach2.

  1. 在第一种方法中,您可以声明具有某个默认值的路由参数.0是一个很好的候选人,因为在它之上建立一些条件是最容易的.它也是typesafe,并预先验证自己.我会在一开始就推荐这个解决方案.
  2. 第二种方法直接从请求中读取params,String因此您需要将其解析为整数,并在需要时另外验证.

routes:

GET     /approach1      controllers.Application.approach1(video_id: Int ?=0)
GET     /approach2      controllers.Application.approach2
Run Code Online (Sandbox Code Playgroud)

动作:

public static Result approach1(int video_id) {
    if (video_id == 0) return badRequest("Wrong video ID");
    return ok("1: Display video no. " + video_id);
}

public static Result approach2() {
    int video_id = 0;

    if (form().bindFromRequest().get("video_id") != null) {
        try {
            video_id = Integer.parseInt(form().bindFromRequest().get("video_id"));
        } catch (Exception e) {
            Logger.error("int not parsed...");
        }
    }

    if (video_id == 0) return badRequest("Wrong video ID");
    return ok("2: Display video no. " + video_id);
}
Run Code Online (Sandbox Code Playgroud)

PS:大声笑我刚刚意识到你想要使用字符串标识符......无论如何这两种方法都是相似的:)


Mau*_*ähä 20

我会简单地使用:

GET /play/video      Controllers.Application.video(video_id:String)
Run Code Online (Sandbox Code Playgroud)

在控制器你当然会有,像:

public static Result video(String video_id) {

     return ok("We got video id of: " + video_id);

}
Run Code Online (Sandbox Code Playgroud)

或者,您不必添加,video_id:String因为默认情况下播放似乎将参数视为String,因此它也可以这样工作(至少在最新播放时):

GET /play/video      Controllers.Application.video(video_id)
Run Code Online (Sandbox Code Playgroud)

键入localhost:9000/play/video?video_id=1sh1地址栏现在应该给出打印的视图:

我们得到了视频ID:1sh1

添加更多参数很简单,如下所示:

GET     /play/video                      controllers.Application.video(video_id:String, site:String, page:Integer)
Run Code Online (Sandbox Code Playgroud)

控制器:

public static Result video(String video_id, String site, Integer page) {

    return ok("We got video id of: " + video_id + " site: " + site + " page: " + page);

}
Run Code Online (Sandbox Code Playgroud)

键入localhost:9000/play/video?video_id=1as1&site=www.google.com&page=3地址栏现在应该给出打印的视图:

我们获得了视频ID:1as1网站:www.google.com页面:3

你很受欢迎^^.


smk*_*smk 3

好的,我刚刚阅读了文档,我的理解是你需要

GET /play/video         Controllers.Application.video()
Run Code Online (Sandbox Code Playgroud)

然后在控制器中调用HttpRequest对象的getQueryString

http://www.playframework.com/documentation/api/2.1.0/java/index.html