未找到播放框架操作:



我自学了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变量,则路径没有尾部斜杠。如果您使用此代码,请检查指定的每条路由是否没有尾部斜杠,否则该路由将不再工作。

最新更新