我学习游戏框架和理解,我可以映射的请求,如/manager/user
为:
GET /manage/:user Controllers.Application.some(user:String)
我怎么会像映射的请求/play/video?video_id=1sh1
?
我学习游戏框架和理解,我可以映射的请求,如/manager/user
为:
GET /manage/:user Controllers.Application.some(user:String)
我怎么会像映射的请求/play/video?video_id=1sh1
?
你至少有两种可能性,我们姑且称之为approach1
和approach2
。
0
是不错的选择,因为这将是最容易建立在它之上的一些条件。 此外,它是typesafe
,和预验证本身。 我建议在开始这一解决方案。 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我只是意识到你想使用字符串标识......反正这两种方法将是类似的:)
我会简单地用做:
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
不客气^^。
我不是很肯定,如果我得到你的意思,如果你的意思只是映射一个URL在控制器的功能biesior的答案是完美的,但如果你的意思是提交与get方法类似形式
@helper.form(action = routes.YourController.page1()) {
}
并具有在url-rewrited格式的URL形式的参数一样
page1/foo/bar instead of page1?param1=foo¶m2=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 )
我希望这会帮助,但我不知道这是最好的做法
好了,所以我刚才读了文件和我的理解是,你需要
GET /play/video Controllers.Application.video()
然后在控制器调用HttpRequest对象的getQueryString
http://www.playframework.com/documentation/api/2.1.0/java/index.html