未找到Play Framework Action:

时间:2014-10-19 17:41:20

标签: playframework

我自学了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标签,我希望这是在这里发布的正确方法。

1 个答案:

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