我目前正在为Dropwizard中的根路径“ /”提供一个静态html页面。到目前为止,我只收到一个错误页面,指出“ HTTP错误404访问/。原因:未找到”。
我已经按照Dropwizard documentation for 1.2.2和本教程here进行了此操作,并对服务代码进行了一些更改。我的.yml文件中的根路径为/profile/v1
,以允许我的getAll服务正常工作(当我第一次启动时,由于拥有Multiple servlets map to path /*
而出现错误。.yml如下所示:
server:
type: simple
applicationContextPath: /
rootPath: /profile/v1
此外,我在主应用程序类中的初始化是:
@Override
public void initialize(final Bootstrap<AutomationConfigServiceConfiguration> bootstrap) {
bootstrap.addBundle(new AssetsBundle("/../resources", "/", "index.html"));
}
这是向球衣注册的:
environment.jersey().setUrlPattern("/*");
其中/resources
是我要保存的静态资产的目录,位于java
目录之外。
到目前为止,在此设置中,我已经能够使我的服务正常运行。例如,当我转到localhost:8080 / profile / v1 / name / getAll时,我可以从数据库中检索所有名称,如果我转到localhost:8080 / profile / v1 / titles / getAll,则可以从数据库中获取所有标题。如果我使用localhost:8080(带或不带“ /”),我只会得到一个404页面,说它找不到“ /”。从理论上讲,这应该非常简单,所以我不确定该怎么做。
编辑:
当我进入/ profile / v1时,得到以下信息:
{
code: 404,
message: "HTTP 404 Not Found",
}
我应该提到,我不希望将html放到这里;我希望从根目录开始使用它,因为路径/ profile / v1被我所有的服务使用。要求这样做以帮助设置DNS。
答案 0 :(得分:3)
在对代码进行了几处修改之后,它才能正常工作。
AssetBundle路径是从项目资源文件夹中计算的。因此,添加相对于它的路径。这里的assets
目录位于${Project Root}/src/main/resources
目录
bootstrap.addBundle(new AssetsBundle("/assets/", "/"));
删除显式的Jersey注册表项。我相信这是从配置继承的。
environment.jersey().setUrlPattern("/*"); /*this line should be removed*/
您需要将dropwizard-assets
包括在项目的依赖项中。
作为参考,刚刚创建了一个带有静态资产的sample project。