Spring Boot submit form

SpringBoot submit form tutorial shows how to submit a form in a Spring Boot application.

Spring Boot submit form

Spring Boot submit form

last modified July 29, 2023

In this article we show how to submit a form in a Spring Boot application.

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

Spring Boot submit form example

The following application contains a simple form. The data from a form is automatically inserted into a UI bean and is available for a view. Thymeleaf is used as a view engine.

The application shows only the simple process of sending and processing a form. In reality, form submission requires extensive validation and security checks.

build.gradle … src ├───main │ ├───java │ │ └───com │ │ └───zetcode │ │ │ Application.java │ │ ├───bean │ │ │ User.java │ │ └───controller │ │ MyController.java │ └───resources │ └───templates │ addUser.html │ showMessage.html └───test └───java

This is the project structure.

build.gradle

plugins { id ‘org.springframework.boot’ version ‘3.1.1’ id ‘io.spring.dependency-management’ version ‘1.1.0’ id ‘java’ }

group = ‘com.zetcode’ version = ‘0.0.1-SNAPSHOT’ sourceCompatibility = ‘17’

repositories { mavenCentral() }

dependencies { implementation ‘org.springframework.boot:spring-boot-starter-web’ implementation ‘org.springframework.boot:spring-boot-starter-thymeleaf’ }

test { useJUnitPlatform() }

This is the Gradle build file. The spring-boot-starter-web is starter for building web, including RESTful, applications using Spring MVC. The spring-boot-starter-thymeleaf is a starter for the Thymeleaf engine.

com/zetcode/bean/User.java

package com.zetcode.bean;

public class User {

private String name;
private String occupation;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getOccupation() {
    return occupation;
}

public void setOccupation(String occupation) {
    this.occupation = occupation;
}

}

This is the User bean. It is automatically filled with data from the form request. The attributes must match the form fields.

com/zetcode/controller/MyController.java

package com.zetcode.controller;

import com.zetcode.bean.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping;

@Controller public class MyController {

@GetMapping("/addUser")
public String sendForm(User user) {

    return "addUser";
}

@PostMapping("/addUser")
public String processForm(User user) {

    return "showMessage";
}

}

The controller class sends and reads a form view.

@PostMapping("/addUser") public String processForm(User user) {

return "showMessage";

}

The User bean is passed as a parameter to the processForm handler. Spring tries to fill the bean with the request data. The data is also automatically available for the Thymeleaf showMessage view.

resources/templates/addUser.html

<!DOCTYPE HTML> <html xmlns:th=“http://www.thymeleaf.org”> <head> <title>Add user</title> <meta charset=“UTF-8”> </head> <body>

<h1>Add User</h1>

<form action="#" th:action="@{/addUser}" th:object="${user}" method=“post”> <p> Name: <input type=“text” th:field="{name}"> </p> <p> Occupation: <input type=“text” th:field="{occupation}"> </p> <p> <input type=“submit” value=“Submit”/> <input type=“reset” value=“Reset”> </p> </form>

</body> </html>

This view contains the form.

<form action="#" th:action="@{/addUser}" th:object="${user}" method=“post”>

The th:object refers to the user form bean. This is not a class name, but a Spring bean name; therefore it is in lowercase.

<p> Name: <input type=“text” th:field="*{name}"> </p>

With the *{} syntax, we refer to the defined object.

resources/templates/showMessage.html

<!DOCTYPE HTML> <html xmlns:th=“http://www.thymeleaf.org”> <head> <title>Show message</title> <meta charset=“UTF-8”> </head> <body>

<h1>Result</h1>

<p th:text="‘Name: ’ + ${user.name}"></p> <p th:text="‘Occupation: ’ + ${user.occupation}"></p> <a href="/addUser">Submit another message</a>

</body> </html>

This template shows the data entered in the form.

<p th:text="‘Name: ’ + ${user.name}"></p>

We refer to the form bean attributes with the ${} syntax.

com/zetcode/Application.java

package com.zetcode;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication public class Application extends SpringBootServletInitializer {

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

}

The Application sets up the Spring Boot application.

Navigate to the localhost:8080/addUser to run the application.

In this article we have shown how to submit a simple form in a Spring Boot application.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Spring Boot tutorials.

ad ad