How to Change the Context Path in Spring Boot

The context path is the prefix of the URL path that routes requests to the appropriate controller in a Spring Boot application. By default, the context path is set to /, which means that the application will handle requests from the root context. However, you may need to change the context path for various reasons, such as deploying multiple applications on the same server. This tutorial will guide you through different methods to change the context path in a Spring Boot application.

Prerequisites

  • JDK 17 or later
  • Maven or Gradle
  • IDE (IntelliJ IDEA, Eclipse, etc.)

Method 1: Using application.properties

The simplest way to change the context path is by setting the server.servlet.context-path property in the application.properties file.

Step 1: Set Up a Spring Boot Project

Use Spring Initializr to create a new project with the following dependencies:

  • Spring Web

Download and unzip the project, then open it in your IDE.

Step 2: Configure application.properties

Set up the application properties to change the context path. This file is located in the src/main/resources directory.

# src/main/resources/application.properties

# Server context path configuration
server.servlet.context-path=/myapp

Explanation:

  • server.servlet.context-path=/myapp: Changes the context path from the default / to /myapp.

Method 2: Using application.yml

You can also change the context path using the application.yml file.

Step 1: Set Up a Spring Boot Project

Use Spring Initializr to create a new project with the following dependencies:

  • Spring Web

Download and unzip the project, then open it in your IDE.

Step 2: Configure application.yml

Set up the application YAML configuration to change the context path. This file is located in the src/main/resources directory.

# src/main/resources/application.yml

server:
  servlet:
    context-path: /myapp

Explanation:

  • The above property changes the context path from the default / to /myapp.

Method 3: Using Command Line Arguments

You can override the context path by passing a command line argument when starting the application.

Step 1: Run the Application with a Command Line Argument

Use the following command to run the Spring Boot application with a different context path:

./mvnw spring-boot:run -Dspring-boot.run.arguments=--server.servlet.context-path=/myapp

Explanation:

  • -Dspring-boot.run.arguments=--server.servlet.context-path=/myapp: Specifies the context path as a command line argument.

Method 4: Programmatically Setting the Context Path

You can programmatically set the context path by configuring a ConfigurableServletWebServerFactory bean.

Step 1: Create a Configuration Class

Create a new configuration class to set the context path programmatically.

package com.example.demo.config;

import org.springframework.boot.web.server.ConfigurableWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WebServerConfig {

    @Bean
    public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() {
        return factory -> factory.setContextPath("/myapp");
    }
}

Explanation:

  • WebServerFactoryCustomizer<ConfigurableWebServerFactory>: Customizes the web server factory to set the context path.
  • factory.setContextPath("/myapp"): Sets the context path to /myapp.

Method 5: Using Environment Variables

You can use environment variables to set the context path.

Step 1: Set the Environment Variable

Set the SERVER_SERVLET_CONTEXT_PATH environment variable before running the application.

For Unix-based systems (Linux, macOS):

export SERVER_SERVLET_CONTEXT_PATH=/myapp
./mvnw spring-boot:run

For Windows:

set SERVER_SERVLET_CONTEXT_PATH=/myapp
./mvnw spring-boot:run

Explanation:

  • SERVER_SERVLET_CONTEXT_PATH=/myapp: Sets the environment variable for the context path to /myapp.

Step 3: Create a Simple Controller

Create the HelloController

Create a controller to handle incoming requests.

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

Explanation:

  • @RestController: Marks the class as a REST controller.
  • @GetMapping("/hello"): Maps GET requests to the /hello endpoint.

Step 4: Running and Testing the Application

4.1 Run the Application

Run the Spring Boot application using your IDE or the command line:

./mvnw spring-boot:run

4.2 Test the Context Path Change

Use a web browser or a tool like Postman to test the new context path. Navigate to http://localhost:8080/myapp/hello to see the "Hello, World!" message.

Conclusion

In this tutorial, you have learned different methods to change the context path in a Spring Boot application. The methods include:

  • Using application.properties
  • Using application.yml
  • Using command line arguments
  • Programmatically setting the context path
  • Using environment variables

By following these steps, you can effectively change the context path of your Spring Boot application to suit your needs.

Comments