この記事一旦中断です。
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);
}
}