#SpringBoot2.Xのコンテキストパスを設定するには?
SpringMVCではweb.xmlに以下のように設定しましたが、SpringBootのやり方がわからなかったのでメモ
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
背景
SpringBootでAPI開発しようと思って、http:///localhost:8080/api/v1/app
のように設定しようと思ったらデフォルトではhttp:///localhost:8080/app
でマッピングされるので/api/v1
をController
のRequestMapping
に実装するのも冗長だなと思い。
本題
意外と検索しても情報が違う。。。と思ったので調べてみました。
SpringBoot公式Appendixを見ると該当しそうなプロパティが3つ。
server.servlet.context-path=
server.servlet-path=
spring.mvc.servlet.path=
server.servlet-path
本家では現在非推奨とのこと。spring.mvc.servlet.path
を使え!!
spring.mvc.servlet.path
コンテキストパスではなくサーブレットパス。初め、これを設定してしまいました。
spring.mvc.servlet.path
設定してRequestMapping
でマッピングしたController
が動くので
勘違いしていました。
Thymeleafのリンク式がうまくレンダリングされなかったので調べた経緯。
server.servlet.context-path
コンテキストパスの設定はこれでした
結論
コンテキストパスなら以下のように設定するのが正解
server.servlet.context-path=/api/v1
コンテキストパスとサーブレットパスがごっちゃになっていたようです。
ちなみにSpringBoot1.X
ではserver.context-path=/api/v1
で設定できます。
補足
Thymeleafのリンク式では/
で始めるとコンテキストパスが追加されます。
<a th:href="@{/app/member}">メンバ表示</a>
<a href="/api/v1/app/member">メンバ表示</a>