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