Spring Boot automated controller

last modified July 6, 2020

Spring Boot automated controller shows how to create simple automated controller in a Spring Boot application with ViewControllerRegistry. Our application shows a simple page that displays current date. We use FreeMarker as template engine.

Spring is a popular Java application framework. Spring Boot is an effort to create stand-alone, production-grade Spring based applications without much hassle.

FreeMarker is a server-side Java template engine for both web and standalone environments. Templates are written in the FreeMarker Template Language (FTL), which is a simple, specialized language.


Sometimes we do not need complex controller logic and just want to return a view. ViewControllerRegistry registers simple automated controllers pre-configured with status code and/or a view. Its addViewController() method maps a view controller to the given URL path (or pattern) in order to render a response with a pre-configured status code and view.

│   ├───java
│   │   └───com
│   │       └───zetcode
│   │           │   Application.java
│   │           └───config
│   │                   MvcConfig.java
│   └───resources
│       └───templates
│               index.ftlh

This is the project structure. FreeMarker template files have .ftlh suffix; they are located in the resources/templates directory by default. Spring Boot automatically configures FreeMarker when it finds the dependency in the Maven POM file. We also include a test file.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"








The spring-boot-starter-freemarker is starter for building Spring MVC applications with FreeMarker. The spring-boot-starter-test imports necessary testing modules. The application is packaged into a JAR file.

package com.zetcode.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

public class MvcConfig implements WebMvcConfigurer {

    public void addViewControllers(ViewControllerRegistry registry) {

In the MvcConfig class we configure a view and a controller for the home page. Since we have FreeMarker in the Maven POM file, Spring Boot automatically configures FreeMarker as the template engine. So the index view is mapped to the index.ftlh template file, which is located in the src/main/resources/templates directory.

<#assign now = .now>
<!DOCTYPE html>
        <title>Home page</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <p>Today is: ${now?string.short}</p>

The index.ftlh template file is the home page of the application. It displays current date.

<#assign now = .now>

Here we assign current date time value to the now variable.

<p>Today is: ${now?string.short}</p>

We print the date in the short format.

package com.zetcode;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

We set up the Spring Boot application. The @SpringBootApplication annotation enables auto-configuration and component scanning.

package com.zetcode;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;

public class HomePageTest {

    private WebApplicationContext wac;

    private MockMvc mockMvc;

    public void setUp() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();

    public void testHomePage() throws Exception {

This is a test for the home page.

$ mvn -q spring-boot:run

We start the application.

$ curl localhost:8080
<!DOCTYPE html>
        <title>Home page</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <p>Today is: 1/18/20, 8:09 AM</p>

With the curl tool, we retrieve the home page.

In this tutorial, we have created a simple controller and view in Spring Boot without creating a specific controller class. We have used FreeMarker as template engine.

List all Spring Boot tutorials.