使用 `BindingResult` 的步骤

简介: 使用 `BindingResult` 的步骤

使用 BindingResult 的步骤

  1. 引入依赖:确保你的项目中已经引入了 Spring Web 和 Validation 相关的依赖。
  2. 创建表单对象:定义一个 Java 类来表示表单数据,并使用注解进行验证。
  3. 在控制器中处理表单提交:在控制器方法中使用 @Valid 或 @Validated 注解对表单对象进行验证,并通过 BindingResult 捕获验证错误。
  4. 处理验证结果:检查 BindingResult 对象是否包含错误,如果有错误,返回相应的错误信息或页面。

示例代码

1. 引入依赖

确保你的 pom.xml 中包含以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. 创建表单对象

使用 Java 类表示表单数据,并使用注解进行验证:

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
public class UserForm {
    
    @NotEmpty(message = "Name is required")
    @Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters")
    private String name;
    @NotEmpty(message = "Email is required")
    private String email;
    // Getters and Setters
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}
3. 在控制器中处理表单提交

使用 @Valid 或 @Validated 注解对表单对象进行验证,并通过 BindingResult 捕获验证错误:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import javax.validation.Valid;
@Controller
public class UserController {
    @GetMapping("/user")
    public String showForm(Model model) {
        model.addAttribute("userForm", new UserForm());
        return "userForm";
    }
    @PostMapping("/user")
    public String submitForm(@Valid @ModelAttribute("userForm") UserForm userForm, BindingResult bindingResult, Model model) {
        if (bindingResult.hasErrors()) {
            return "userForm";
        }
        model.addAttribute("message", "Form submitted successfully!");
        return "success";
    }
}
4. 创建视图

创建一个简单的 HTML 表单(假设你使用的是 Thymeleaf 作为模板引擎):

userForm.html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User Form</title>
</head>
<body>
    <form th:action="@{/user}" th:object="${userForm}" method="post">
        <div>
            <label for="name">Name:</label>
            <input type="text" id="name" th:field="*{name}" />
            <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</p>
        </div>
        <div>
            <label for="email">Email:</label>
            <input type="email" id="email" th:field="*{email}" />
            <p th:if="${#fields.hasErrors('email')}" th:errors="*{email}">Email Error</p>
        </div>
        <div>
            <button type="submit">Submit</button>
        </div>
    </form>
</body>
</html>

success.html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Success</title>
</head>
<body>
    <p th:text="${message}"></p>
</body>
</html>

解释

  1. 表单对象 (UserForm) 使用 Java 验证注解来定义验证规则。
  2. 控制器 (UserController) 包含一个 GET 方法来显示表单和一个 POST 方法来处理表单提交。
  3. 视图 使用 Thymeleaf 模板引擎来显示表单和错误消息。
  4. 验证 通过 @Valid 注解进行,BindingResult 对象捕获验证错误,并在有错误时返回表单页面。

通过这种方式,你可以有效地处理表单验证,并使用 BindingResult 提供的详细错误信息来指导用户纠正输入错误。

相关文章
|
SQL 存储 关系型数据库
解析MySQL Binlog:从零开始的入门指南【binlog入门指南】
解析MySQL Binlog:从零开始的入门指南【binlog入门指南】
13899 0
|
存储 NoSQL Java
SpringBoot 中使用 MongoDB 基于 MongoRepository增删改查(基础篇)
SpringBoot 中使用 MongoDB 基于 MongoRepository增删改查(基础篇)
1288 0
|
XML 缓存 前端开发
Thymeleaf一篇就够了
Thymeleaf是Springboot官方支持的模板引擎,有着动静分离等独有特点,通过本文简单学习下吧!
63621 24
Thymeleaf一篇就够了
|
NoSQL 数据可视化 关系型数据库
推荐几个好用的redis可视化工具
推荐几个好用的redis可视化工具
18122 1
|
缓存 JavaScript Cloud Native
阿里云发布 Spring Boot 新脚手架,真香
本文,围绕 spring initializr 框架,以 start.spring.io 为例,全面的给大家介绍如何使用和扩展这个框架,以及背后的运行原理。
58747 1
阿里云发布 Spring Boot 新脚手架,真香
|
Java API Spring
Springfox Swagger2从入门到精通
本文详细介绍了如何使用Springfox Swagger2在Spring Boot项目中生成API文档,包括引入依赖、配置Swagger2、启用Swagger2、编写API文档注释、访问Swagger UI以及常用注解分析和高级配置。
1194 0
Springfox Swagger2从入门到精通
|
9月前
|
JSON 前端开发 Java
深入理解 Spring Boot 中日期时间格式化:@DateTimeFormat 与 @JsonFormat 完整实践
在 Spring Boot 开发中,处理前后端日期交互是一个常见问题。本文通过 **@DateTimeFormat** 和 **@JsonFormat** 两个注解,详细讲解了如何解析前端传来的日期字符串以及以指定格式返回日期数据。文章从实际案例出发,结合代码演示两者的使用场景与注意事项,解决解析失败、时区偏差等问题,并提供全局配置与局部注解的实践经验。帮助开发者高效应对日期时间格式化需求,提升开发效率。
2662 2
|
XML 前端开发 Java
SpringBoot参数校验@Validated、@Valid(javax.validation)详解
SpringBoot参数校验@Validated、@Valid(javax.validation)
2722 4
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
16686 6