使用 `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 提供的详细错误信息来指导用户纠正输入错误。

相关文章
|
Java 数据库连接 Spring
Spring之数据校验:Validation
【1月更文挑战第17天】 一、Spring Validation概述 二、实验一:通过Validator接口实现 三、实验二:Bean Validation注解实现 四、实验三:基于方法实现校验 五、实验四:实现自定义校验
791 2
Spring之数据校验:Validation
|
Web App开发 前端开发 Java
SpringBoot默认200个线程对于Websocket长连接够用吗?(一)
上篇推文从源码剖析SpringBoot中Tomcat的默认最大连接数中我们知道,SpringBoot的内嵌Tomcat默认的最大连接数为200。那么,这个默认值对于项目中引入了WebSocket使用长连接后,是否足够用呢?今天强哥就带大家一起从源码的角度来分析一下。
SpringBoot默认200个线程对于Websocket长连接够用吗?(一)
|
8月前
|
Java API 开发者
告别“线程泄露”:《聊聊如何优雅地关闭线程池》
本文深入讲解Java线程池优雅关闭的核心方法与最佳实践,通过shutdown()、awaitTermination()和shutdownNow()的组合使用,确保任务不丢失、线程不泄露,助力构建高可靠并发应用。
|
10月前
|
存储 Prometheus 监控
从入门到实战:一文掌握微服务监控系统 Prometheus + Grafana
随着微服务架构的发展,系统监控变得愈发重要。本文介绍如何利用 Prometheus 和 Grafana 构建高效的监控系统,涵盖数据采集、存储、可视化与告警机制,帮助开发者提升系统可观测性,及时发现故障并优化性能。内容涵盖 Prometheus 的核心组件、数据模型及部署方案,并结合 Grafana 实现可视化监控,适合初学者和进阶开发者参考实践。
1181 6
|
SQL 关系型数据库 MySQL
MySQL8 窗口函数
MySQL 8 引入了窗口函数,这是一种强大的分析工具,可以在查询结果集中执行计算而无需将数据分组到多个输出行中。本文介绍了窗口函数的基本概念和使用方法,并通过几个实际案例展示了如何使用窗口函数进行成绩和排名统计、销售数据分析等操作。
871 1
MySQL8 窗口函数
|
XML 前端开发 Java
SpringBoot参数校验@Validated、@Valid(javax.validation)详解
SpringBoot参数校验@Validated、@Valid(javax.validation)
3725 4
|
关系型数据库 Linux 数据库
PostgreSQL 入门指南:安装、配置与基本命令
本文从零开始,详细介绍如何在 Windows、Linux 和 macOS 上安装和配置 PostgreSQL,涵盖30+个实操代码示例。内容包括安装步骤、配置远程访问和用户权限、基础数据库操作命令(如创建表、插入和查询数据),以及常见问题的解决方案。通过学习,你将掌握 PostgreSQL 的基本使用方法,并为后续深入学习打下坚实基础。
15824 1
|
XML 前端开发 Java
【Spring MVC 系列】Spring MVC 中 Filter 配置的 6 种方式,看看你了解哪些
Filter 简介 过滤器 Filter 在 Servlet 2.3 版本中被首次提出,唯一的作用就是过滤,它不仅可以过滤请求,还可以过滤响应,当请求到达 Servlet 容器,会先经过 Filter ,然后再交给 Servlet,之后 Filter 还可以对 Servlet 的响应进一步处理。并且多个 Filter 还能形成一个链。使用图示表达如下。
1751 0
【Spring MVC 系列】Spring MVC 中 Filter 配置的 6 种方式,看看你了解哪些
|
缓存 Rust 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建
2680 0
|
Java API Spring
Springfox Swagger2从入门到精通
本文详细介绍了如何使用Springfox Swagger2在Spring Boot项目中生成API文档,包括引入依赖、配置Swagger2、启用Swagger2、编写API文档注释、访问Swagger UI以及常用注解分析和高级配置。
1641 0
Springfox Swagger2从入门到精通

热门文章

最新文章