我自学了Play框架并从Manning购买了“Play for Java”。我按照他们的指示,自从该书出版以来,有一些更新(自然)。我收到以下错误:
未找到操作请求'GET / products'
包控制器;
import play.mvc.Controller;
import play.mvc.Result;
public class Products extends Controller {
public static Result list(){
return TODO;
}
public static Result newProduct(){
return TODO;
}
public static Result details(String ean){
return TODO;
}
public static Result save(){
return TODO;
}
}
GET / controllers.Application.index()
GET / assets / *文件controllers.Assets.at(path =“/ public”,file)
GET / products / controllers.Products.list()
GET / products / new controllers.Products.newProduct()
GET / products /:ean controllers.Products.details(ean:String)
POST / products / controllers.Products.save()
我为此使用了HTML标签,我希望这是在这里发布的正确方法。
答案 0 :(得分:0)
我最后一次使用Play Framework时,必须分别处理带有斜杠的路径,因为这个框架的路由引擎会这样做。
因此,您要么将斜杠添加到您的网址,要么更改为routes
文件中的以下行:
GET /products/ controllers.Products.list()
为:
GET /products controllers.Products.list()
解决方法强>
我使用以下代码从URL中删除尾部斜杠:
将此行添加到routes
文件中:
# Reroute URL with a trailing slash
GET /*path/ controllers.Reroute.trailingSlash(path: String)
这是相应的类:
public class Reroute extends Controller {
public static Result trailingSlash(String path) {
/**
* Moved_Permantly is an HTTP code that indicates a moved ressource. The browser will
* cache the new address and redirect automatically if the user enters the old URL again.
*/
return movedPermanently("/" + path);
}
}
如果我记得正确包含path
变量的路径没有尾部斜杠。如果您使用此代码,请检查是否指定了每条路线而没有尾部斜线,否则该路线将不再起作用。