我自学了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/控制器。Application.index()
GET/assets/*文件控制器。资产.在(路径="/public",文件)
GET/产品/控制器。Products.list()
获取/产品/新控制器。Products.newProduct()
GET/products/:ean控制器。Products.details(ean:String)
POST/产品/控制器。Products.save()
我使用了HTML标签,我希望这是正确的方式张贴在这里。
上次我使用Play Framework时,有必要单独处理带有尾部斜杠的路径,因为这个框架的路由引擎确实这样做了。
所以,您可以在URL中添加尾部斜杠,也可以在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
变量,则路径没有尾部斜杠。如果您使用此代码,请检查指定的每条路由是否没有尾部斜杠,否则该路由将不再工作。