使用Dropwizard提供静态资产

问题描述 投票:2回答:1

Dropwizard版本1.3.0-rc6

关于提供静态内容的大多数文档都适用于旧版本,甚至Dropwizard Manual中的更新文档也不适用于我。

我想提供一个静态的html文件。我已经修改了这些资产所在的结构/路径,但是在我的环境中无法完全获得配置。

静态内容位于以下结构下


src/main/
├── java
│   └── org
│       └── com
│           └── query
│       
│               ├── rest
│               │   ├── api
│               │   ├── cli
│               │   ├── core
│               │   ├── db
│               │   ├── health
│               │   ├── resources
│               │   ├── tasks
│               │   └── views
│    
├── resources
│   ├── META-INF
│   │   ├── bin-license-notice
│   │   │   └── licenses
│   │   └── services
│   └── rest
│       ├── ftl
│       └── mustache
└── webapp
    ├── WEB-INF
    │   └── views
    │       └── jsp
    └── resources
        └── core
            ├── css
            └── js

multiFileUpload.htmlsrc/main/webapp/resources/core dir里面,这最终是我想要服务的。然而,这与src/main/resources/assets/的dropwizard标准不同。

我需要扩展构造函数来指定单个AssetBundles,因为我计划有多个AssetBundle实例。这就是我在应用程序初始化方法中的内容。

@Override public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) { bootstrap.addBundle(new AssetsBundle("/webapp/resources/core/*", "/", null, "/MultiFileUpload.html")); }

我还在应用程序运行方法中设置了urlPattern。 environment.jersey().setUrlPattern("/rest/*");

我的config.yml中的根路径是rootPath:/rest/*

我有一个端点,应该提供.html文件。 localhost:port/rest/upload/multiFile

我几乎可以肯定其中一条路径是不正确的,但我已经尝试根据文档示例更改它们,但没有任何运气。

java rest dropwizard
1个回答
2
投票

我刚刚在一个类似的问题上发布了一个answer。我也会在这里列出它们,

  1. AssetBundle路径是从项目资源文件夹计算的。因此,添加相对于此的路径。这里的assets目录位于${Project Root}/src/main/resources目录 bootstrap.addBundle(new AssetsBundle("/assets/", "/"));
  2. 删除显式Jersey注册表项。我相信这是继承自配置。 environment.jersey().setUrlPattern("/*"); /*this line should be removed*/

您需要将dropwizard-assets包含在项目的依赖项中。

为了便于参考,我创建了一个带静态资产的sample project

© www.soinside.com 2019 - 2024. All rights reserved.