Playframework路由文件:将生产路由与开发路由分开

Playframework路由文件:将生产路由与开发路由分开,playframework,routes,playframework-1.x,Playframework,Routes,Playframework 1.x,是否有一种方法可以注释路由,以告知某个区段/组路由仅在开发或生产模式下可用?嗯,这没有记录,因此我不确定这是否是有意实现的,但我已经找到了一种方法来实现这一点。但是请注意,由于这是一个未记录的功能,可能意味着它是非故意的,因此可能会在未来版本的play中中断 您可以使用routes文件中的以下行实现所需 %{ if (play.mode.isDev()) }% 我用几个动作创建了一个测试应用程序 public class Application extends Controller {

是否有一种方法可以注释路由,以告知某个区段/组路由仅在开发或生产模式下可用?嗯,这没有记录,因此我不确定这是否是有意实现的,但我已经找到了一种方法来实现这一点。但是请注意,由于这是一个未记录的功能,可能意味着它是非故意的,因此可能会在未来版本的play中中断

您可以使用routes文件中的以下行实现所需

%{ if (play.mode.isDev()) }%
我用几个动作创建了一个测试应用程序

public class Application extends Controller {

    public static void index() {
        render();
    }

    public static void noDev() {
        renderText("NoDev");
    }
    public static void noProd() {
        renderText("NoProd");
    }
}
然后,我将以下内容添加到我的routes文件中

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404
# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

%{ if (play.mode.isDev()) }%
GET     /route1                                 Application.noDev
GET     /route2                                 Application.noDev
GET     /route3                                 Application.noDev
*       /{controller}/{action}                  {controller}.{action}

%{ if (play.mode.isProd()) }%
GET     /route4                                 Application.noProd
GET     /route5                                 Application.noProd
GET     /route6                                 Application.noProd
*       /{controller}/{action}                  {controller}.{action}
因此,您可以看到,使用一个简单的if语句,它将仅在该模式下执行下一组路由。当找到下一个if语句时,if语句将结束


如果在开发模式下尝试访问route4,您将无法访问它,并且您将看到RouteNotFound页面,显示可用的路由是您为开发人员定义的路由。

对于play framework 2.x版:

  • 您需要在应用程序的根目录中有另一个
    路由
    文件(与原始
    路由
    文件的目录相同),该文件仅包含生产所需的路由
  • 然后在
    conf
    文件夹中创建另一个
    .conf
    文件,如
    prod.conf
  • 现在,这个新的conf文件必须包含以下内容:
对于play framework 2.4及更新版本:

include "application.conf"

play.http.router=prod.Routes
或者不带新的
.conf
文件传递参数:

-Dplay.http.router=prod.Routes

如果大于2.4,则:

include "application.conf"

application.router=prod.Routes

当您运行产品时,请使用
-Dconfig.file=prod.conf

运行它,这非常好。我不知道你可以在路由文件中做逻辑,我知道你可以做一些逻辑,因为这是一个解决战争背景问题的方法,但不确定有多少逻辑是可能的。所以我试过了,它成功了!您还可以使用groovy if标记,例如
{if(play.mode.isDev())}一些路由{/if}
,如果您想自己结束的话:只是为了加强@kheraud上面的评论:这在游戏2中不起作用。