Dropwizardのassetsに/をmappingしたい
Dropwizardにおいて、静的なファイル(html, js, css…)はデフォルトでは
- http://{ドメイン}/assets/* → "src/main/resources/assets/*"
となっています。
ですが、トップページなどはURL直接指定でアクセスできると格好良かったりします。
先記のデフォルトは一応AssetBundleを使用することで変更できますが
ルートにはできない仕様らしいです。
Asset bundles not able to be served from root path. · Issue #661 · dropwizard/dropwizard · GitHub
Google先生に聞くと外人がたくさん困ってましたが、
ログを一生懸命漁っていると解決した声を見つけました。
上記リンクの下のほうにあり、まとめると
-
Application#initialize()において
bootstrap.addBundle(new AssetsBundle("/assets/", "/"));
-
Application#run()において
environment.jersey().setUrlPattern("/services/*");
1つめでやりたいことやって(従来はだめでしたが)、
2つめでjerseyのマッピングをしています(ここでは"/services/"以下)。
Dropwizardのjerseyはルートがデフォルトなので、
2つめがないと静的ファイルをjerseyで解決しようとして404になります。
( 2つ目の項目ですが、公式ドキュメントにあるように、
設定ファイルにapplicationContextPathを設定してもうまく動作しませんでした。)
日本語が少なくて大変…