原文: http://zetcode.com/springboot/submitform/

SpringBoot 提交表单教程展示了如何在 Spring Boot 应用中提交表单。

Spring 是流行的 Java 应用框架。 Spring Boot 致力于以最小的努力创建独立的,基于生产级别的基于 Spring 的应用。

Spring Boot 提交表单示例

以下应用包含一个简单的表格。 来自表单的数据会自动插入到 UI Bean 中,并且可用于视图。 Thymeleaf 用作视图引擎。

  1. pom.xml
  2. src
  3. ├───main
  4. ├───java
  5. └───com
  6. └───zetcode
  7. Application.java
  8. ├───bean
  9. User.java
  10. └───controller
  11. MyController.java
  12. └───resources
  13. └───templates
  14. addUser.html
  15. showMessage.html
  16. └───test
  17. └───java

这是项目结构。

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  5. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  6. <modelVersion>4.0.0</modelVersion>
  7. <groupId>com.zetcode</groupId>
  8. <artifactId>SpringBootSubmitFormEx</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. <packaging>jar</packaging>
  11. <properties>
  12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13. <maven.compiler.source>11</maven.compiler.source>
  14. <maven.compiler.target>11</maven.compiler.target>
  15. </properties>
  16. <parent>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-parent</artifactId>
  19. <version>2.1.0.RELEASE</version>
  20. </parent>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-web</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  29. </dependency>
  30. </dependencies>
  31. <build>
  32. <plugins>
  33. <plugin>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-maven-plugin</artifactId>
  36. </plugin>
  37. </plugins>
  38. </build>
  39. </project>

这是 Maven 构建文件。 spring-boot-starter-web是使用 Spring MVC 构建 Web(包括 RESTful)应用的入门程序。 spring-boot-starter-thymeleaf是 Thymeleaf 发动机的启动器。 当 Spring 在pom.xml中找到依赖项时,它将自动为我们配置 Thymeleaf。

com/zetcode/bean/User.java

  1. package com.zetcode.bean;
  2. public class User {
  3. private String name;
  4. private String occupation;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public String getOccupation() {
  12. return occupation;
  13. }
  14. public void setOccupation(String occupation) {
  15. this.occupation = occupation;
  16. }
  17. }

这是User bean。 它会自动填充表单请求中的数据。 这些属性必须与表单字段匹配。

com/zetcode/controller/MyController.java

  1. package com.zetcode.controller;
  2. import com.zetcode.bean.User;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. @Controller
  7. public class MyController {
  8. @GetMapping("/addUser")
  9. public String sendForm(User user) {
  10. return "addUser";
  11. }
  12. @PostMapping("/addUser")
  13. public String processForm(User user) {
  14. return "showMessage";
  15. }
  16. }

控制器类发送和读取表单视图。

  1. @PostMapping("/addUser")
  2. public String processForm(User user) {
  3. return "showMessage";
  4. }

User bean 作为参数传递给processForm()处理器。 Spring 尝试用请求数据填充 Bean。 数据也可自动用于 Thymeleaf showMessage视图。

com/zetcode/Application.java

  1. package com.zetcode;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
  5. @SpringBootApplication
  6. public class Application extends SpringBootServletInitializer {
  7. public static void main(String[] args) {
  8. SpringApplication.run(Application.class, args);
  9. }
  10. }

Application设置 Spring Boot 应用

resources/templates/addUser.html

  1. <!DOCTYPE HTML>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <title>Add user</title>
  5. <meta charset="UTF-8">
  6. </head>
  7. <body>
  8. <h1>Add User</h1>
  9. <form action="#" th:action="@{/addUser}" th:object="${user}" method="post">
  10. <p>
  11. Name: <input type="text" th:field="*{name}">
  12. </p>
  13. <p>
  14. Occupation: <input type="text" th:field="*{occupation}">
  15. </p>
  16. <p>
  17. <input type="submit" value="Submit"/> <input type="reset" value="Reset">
  18. </p>
  19. </form>
  20. </body>
  21. </html>

该视图包含表单。

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

th:object引用user表单 bean。 这不是一个类名,而是一个 Spring bean 名称。 因此它是小写的。

  1. <p>
  2. Name: <input type="text" th:field="*{name}">
  3. </p>

使用*{}语法,我们引用已定义的对象。

resources/templates/showMessage.html

  1. <!DOCTYPE HTML>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <title>Show message</title>
  5. <meta charset="UTF-8">
  6. </head>
  7. <body>
  8. <h1>Result</h1>
  9. <p th:text="'Name: ' + ${user.name}"></p>
  10. <p th:text="'Occupation: ' + ${user.occupation}"></p>
  11. <a href="/addUser">Submit another message</a>
  12. </body>
  13. </html>

该模板显示在表单中输入的数据。

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

我们使用${}语法引用表单 bean 属性。

导航至localhost:8080/addUser以测试应用。

在本教程中,我们展示了如何在 Spring Boot 应用中提交简单表单。 您可能也对相关教程感兴趣: Spring Boot 第一个 Web 应用Spring Boot RESTFul 应用Spring Boot @Controller教程独立 Spring 应用Java 教程