Url 使用动态http部件重载路由

Url 使用动态http部件重载路由,url,playframework,get,routes,operator-overloading,Url,Playframework,Get,Routes,Operator Overloading,我有一条路线,比如: GET /latest/:repo/:artifact controllers.Find.findLatestArtifact(repo: String, artifact: String) GET /latest controllers.Find.findLatestArtifact() 这对我们来说是一个restful api。但是现在,我有了一个带有html表单的新视图,它需要向控制器发送操作,并用表单中的两个html选择填充参数

我有一条路线,比如:

GET     /latest/:repo/:artifact     controllers.Find.findLatestArtifact(repo: String, artifact: String)
GET     /latest     controllers.Find.findLatestArtifact()
这对我们来说是一个restful api。但是现在,我有了一个带有html表单的新视图,它需要向控制器发送操作,并用表单中的两个html选择填充参数

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

GET     /latest/:repo/:artifact     controllers.Find.findLatestArtifact(repo: String, artifact: String)
GET     /latest     controllers.Find.findLatestArtifact()
以及重载控制器方法以手动读取http get参数,但它不喜欢这样

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

看来这是不可能的。那么,我如何解决这个问题,而不必重命名控制器方法?

编辑: 我已经为你的另一个问题提供了答案,但干净的解决方案是不相关的。 实际上,您可以使用以下内容使路线过载

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 ...
}
或者你也可以用另一种方式()