使用动态http部件重载路由

时间:2015-10-01 16:50:56

标签: url playframework get routes operator-overloading

我有一条路线,如:

GET     /latest/:repo/:artifact     controllers.Find.findLatestArtifact(repo: String, artifact: String)

对我们来说是一个宁静的api。但是现在,我有一个带有html表单的新视图,需要向该控制器发送操作,并使用表单中的两个html选项填充参数。

我尝试添加另一条路线,如:

GET     /latest     controllers.Find.findLatestArtifact()

并重载控制器方法以手动读取http get参数,但它不喜欢它。

以前在过去我已经在这里问过如何在一个没有0参数的控制器中填写html表单中的参数:

Binding an html form action to a controller method that takes some parameters

似乎不可能。那么,如何解决这个问题,而不必重命名控制器方法?

1 个答案:

答案 0 :(得分:2)

修改 我已经为你的另一个问题提供了答案,但对此的清晰解决方案是无关紧要的。 你实际上可以用

之类的东西重载路由
GET     /latest                     controllers.Find.findLatestArtifact()
GET     /latest/:repo/:artifact     controllers.Find.findLatestRepoArtifact(repo: String, artifact: String)

确保以正确的顺序列出它们。显然这些将路由到不同的方法(这是更干净的服务器端,更能描述方法的实际功能),所以在你的代码中你需要一个简单的重定向或只返回重载方法的结果:

public static Result findLatestArtifact(){
        return findLatestRepoArtifact("DefaultRepo","DefaultArtifact");
}

public static Result findLatestRepoArtifact(String repo, String artifact){
               ... some code here ...
}

或者你可以用其他方式(see other answer

来做