在Play框架中,有没有一种方法可以使用注解路由来表明某个部分/组路由仅在开发模式或生产模式下可用?
在Play框架中,有没有一种方法可以使用注解路由来表明某个部分/组路由仅在开发模式或生产模式下可用?
好的,这并没有被记录在文档中,所以我不确定这是否是有意进行的或者是不是可以这样做,但是我已经找到了一种方法来使它起作用。请注意,因为这是未记录的功能,可能意味着它是无意的,因此在未来版本的play中可能会出现问题。
您可以在路由文件中使用以下行来实现您想要的目标。
%{ 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");
}
}
我随后在我的路由文件中添加了以下内容
# 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 版本:
routes
文件相同的目录)中创建另一个名为 prod.routes
的 routes
文件,该文件仅包含您要用于生产环境的路由。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
参数。
#{ if (play.mode.isDev()) } SOME ROUTE #{/if}
。 :) - Umut Benzer