我正在使用Play框架为我的休息服务开发一个角度应用程序。公用文件夹中的所有内容都是一个有角度的应用程序(样式表,javascripts,图像和HTML)。我希望每个请求都不会被样式表,javascripts,模板或图像文件夹中的某些内容路由到index.html页面。这样,角度路由可以从那里接管......
作为附注,我可以提一下,我将把/services/
下的每个restservice放在我自己的java控制器上。
在游戏框架2.3.4中是否可以定义一条无需使用匹配元素即可捕获所有路由的路由?
这是我到目前为止的路线:
GET / controllers.Assets.at(path="/public", file="index.html")
GET /stylesheets/*file controllers.Assets.at(path="/public/stylesheets", file)
GET /javascripts/*file controllers.Assets.at(path="/public/javascripts", file)
GET /templates/*file controllers.Assets.at(path="/public/templates", file)
GET /images/*file controllers.Assets.at(path="/public/images", file)
#this line fails
GET /* controllers.Assets.at(path="/public", file="index.html")
答案 0 :(得分:4)
不可能省略匹配元素的使用,但您可以通过控制器路由客户端。路线定义如下:
GET /*path controllers.Application.matchAll(path)
相应的控制器可以实现如下:
public class Application extends Controller {
public static Result matchAll(String path) {
return redirect(controllers.routes.Assets.at("index.html"));
}
}
<强>更新强>
如果您不想重定向客户端,则可以将静态资源作为流返回。在这种情况下,需要响应MIME类型。
public class Application extends Controller {
public static Result matchAll(String path) {
return ok(Application.class.getResourceAsStream("/public/index.html")).as("text/html");
}
}
答案 1 :(得分:0)
对于此任务,您可以在Global
class中使用onHandlerNotFound
,这会在不重定向的情况下呈现某些页面:
import play.*;
import play.mvc.*;
import play.mvc.Http.*;
import play.libs.F.*;
import static play.mvc.Results.*;
public class Global extends GlobalSettings {
public Promise<Result> onHandlerNotFound(RequestHeader request) {
return Promise.<Result>pure(notFound(
views.html.notFoundPage.render(request.uri())
));
}
}