行く記憶の流れは絶えずして

戻ってこないのでメモするところ

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先生に聞くと外人がたくさん困ってましたが、

ログを一生懸命漁っていると解決した声を見つけました。

上記リンクの下のほうにあり、まとめると

  1. Application#initialize()において

    bootstrap.addBundle(new AssetsBundle("/assets/", "/"));
  2. Application#run()において

    environment.jersey().setUrlPattern("/services/*");

1つめでやりたいことやって(従来はだめでしたが)、

2つめでjerseyのマッピングをしています(ここでは"/services/"以下)。

Dropwizardのjerseyはルートがデフォルトなので、

2つめがないと静的ファイルをjerseyで解決しようとして404になります。

( 2つ目の項目ですが、公式ドキュメントにあるように、

設定ファイルにapplicationContextPathを設定してもうまく動作しませんでした。)

 

日本語が少なくて大変…