LoginSignup
0
0

More than 3 years have passed since last update.

Spring BootでControllerとURLが重複するstatic resourceを扱えるようにする→無理だった

Last updated at Posted at 2021-03-13

この記事一旦中断です。
Spring Framework 4.0で実績がある方法だったのですが、Spring Boot 2.0 で試すと動作しませんね。
調査します。

URLとControllerやstatic resourceなどをマッピングする際、何種類かのMappingオブジェクトが使用されます。
Mappingオブジェクト内でURLとControllerなどのパターンマッチングが行われるわけです。
デフォルトでは最後に使用されるのが SimpleUrlHandlerMapping なんですが、このMappingオブジェクトはURLとマッチするパターンとして /** が定義されています。
そのため他のMappingオブジェクトでマッチしなかったURLを、 SimpleUrlHandlerMapping が全部拾う仕様となっています。
また、Mappingオブジェクトの順番を入れ替え SimpleUrlHandlerMapping を最初にすると、すべてのURLがマッチしてしまい、Controllerへマッピングされなくなります。

Spring Framework 4.0(Bootではない)では、static resourceへのマッピングは他のMappingオブジェクトが使用されていたので、下記のような方法が使用できたのです。

Application に以下のメソッドを追加すればOK。
詳しい説明はそのうち。
もっと簡単な方法を模索中。

@Autowired
public void setApplicationContext(final ApplicationContext context) {
    final Object mapping = context.getBean("resourceHandlerMapping");
    if (mapping instanceof SimpleUrlHandlerMapping) {
        ((SimpleUrlHandlerMapping) mapping).setOrder(-1);
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0