LoginSignup
33
27

More than 3 years have passed since last update.

Spring Boot 2.xのコンテキストパスの設定

Posted at

SpringBoot2.Xのコンテキストパスを設定するには?

SpringMVCではweb.xmlに以下のように設定しましたが、SpringBootのやり方がわからなかったのでメモ

web.xml
    <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/v1ControllerRequestMappingに実装するのも冗長だなと思い。

本題

意外と検索しても情報が違う。。。と思ったので調べてみました。

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

コンテキストパスの設定はこれでした

結論

コンテキストパスなら以下のように設定するのが正解

application.properties
server.servlet.context-path=/api/v1

コンテキストパスとサーブレットパスがごっちゃになっていたようです。
ちなみにSpringBoot1.Xではserver.context-path=/api/v1で設定できます。

補足

Thymeleafのリンク式では/で始めるとコンテキストパスが追加されます。

元のhtml
<a th:href="@{/app/member}">メンバ表示</a>
render
<a href="/api/v1/app/member">メンバ表示</a>

参考URL

Spring Boot Change Context Path

33
27
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
33
27