获取有关Play框架请求参数?(Get request parameter with Play Fr

2019-07-19 19:45发布

我学习游戏框架和理解,我可以映射的请求,如/manager/user为:

  GET      /manage/:user    Controllers.Application.some(user:String)

我怎么会像映射的请求/play/video?video_id=1sh1

Answer 1:

你至少有两种可能性,我们姑且称之为approach1approach2

  1. 在第一种方法,你可以声明一些默认值的路线PARAM。 0是不错的选择,因为这将是最容易建立在它之上的一些条件。 此外,它是typesafe ,和预验证本身。 我建议在开始这一解决方案。
  2. 第二条本办法直接读取从请求作为PARAMS String ,所以你需要解析成整型,如果需要额外验证。

routes

GET     /approach1      controllers.Application.approach1(video_id: Int ?=0)
GET     /approach2      controllers.Application.approach2

动作:

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);
}

PS:LOL我只是意识到你想使用字符串标识......反正这两种方法将是类似的:)



Answer 2:

我会简单地用做:

GET /play/video      Controllers.Application.video(video_id:String)

和控制器,你当然会拥有,是这样的:

public static Result video(String video_id) {

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

}

或者,你没有添加video_id:String ,因为比赛显得治疗参数,默认字符串,因此它也可以是这样的(至少在最新播放):

GET /play/video      Controllers.Application.video(video_id)

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

我们得到的视频ID:1sh1

要添加更多的参数是简单的,就像这样:

GET     /play/video                      controllers.Application.video(video_id:String, site:String, page:Integer)

控制器:

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

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

}

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

我们得到的视频ID:1as1网站:www.google.com页:3

不客气^^。



Answer 3:

我不是很肯定,如果我得到你的意思,如果你的意思只是映射一个URL在控制器的功能biesior的答案是完美的,但如果你的意思是提交与get方法类似形式

@helper.form(action = routes.YourController.page1()) {

 }

并具有在url-rewrited格式的URL形式的参数一样

page1/foo/bar instead of page1?param1=foo&param2=bar 

有没有办法做到这一点,因为这是HTTP规范

我也常常通过在控制器中的第一个函数获取参数绕过这个限制,然后将它们重定向到另一个视图,就像下面

public static Result page1(){
   String param1 = Form.form().bindFromRequest().get("param1");
   String param2= Form.form().bindFromRequest().get("param2");

   return ( redirect( routes.YourController.page2(param1,param2)));
}      

然后有什么在第2页

public static Result page2(String param1,String param2){

        ...............
 }

而在路由文件中有这样的:

GET  page2/:param1/:param2        controllers.YourControllers.page2(param1 : String, param2 : String )

我希望这会帮助,但我不知道这是最好的做法



Answer 4:

好了,所以我刚才读了文件和我的理解是,你需要

GET /play/video         Controllers.Application.video()

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

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



文章来源: Get request parameter with Play Framework?