SpringMVC 使用JSR-303进行校验 @Valid示例

下面是 SpringMVC 使用 JSR-303 进行校验的完整攻略:

1. 添加依赖

在 pom.xml 添加如下依赖:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.2.5.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.5.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.hibernate.validator</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>6.0.17.Final</version>
</dependency>

2. 创建验证规则

使用 JSR-303 注解定义验证规则,例如下面的代码:

public class User {
  @NotNull(message = "姓名不能为空")
  private String name;

  @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
  private String phone;

  @Email(message = "邮箱格式不正确")
  private String email;

  // 省略 getter 和 setter
}

这段代码定义了一个 User 类,其中有 namephoneemail 三个字段,使用了 @NotNull@Pattern@Email 注解分别对这三个字段进行了校验。

3. 编写控制器

在控制器方法中使用 @Valid 注解校验请求参数,例如下面的代码:

@RestController
public class UserController {
  @PostMapping("/users")
  public String addUser(@Valid @RequestBody User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
      return bindingResult.getFieldError().getDefaultMessage();
    }
    // 执行添加用户的逻辑
    return "success";
  }
}

这段代码中,@Valid 注解用于校验请求参数中的 User 对象,如果有校验错误,会将错误信息放入 BindingResult 对象中。如果校验成功,则执行添加用户的逻辑。

4. 测试

我们使用 Postman 发送一条 POST 请求,请求的 body 内容为:

{
  "name": null,
  "phone": "12345678900",
  "email": "example.com"
}

根据我们之前定义的校验规则,name 字段不能为空,phone 字段必须是手机号格式,email 字段必须是邮箱格式。因此这个请求会校验失败,返回如下错误信息:

姓名不能为空

5. 示例二

为了更好地说明 SpringMVC 使用 JSR-303 进行校验 @Valid 的使用方法,这里提供另外一条示例:

@RestController
public class UserController {
  @PostMapping("/users")
  public String addUser(@Valid UserInfo userInfo, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
      return bindingResult.getFieldError().getDefaultMessage();
    }
    return "success";
  }
}

public class UserInfo {
  @NotNull(message = "username 不能为空")
  private String username;

  @NotNull(message = "age 不能为空")
  private Integer age;

  @Max(value = 10, message = "score 不得超过 10")
  @Min(value = 0, message = "score 不得低于 0")
  private Integer score;

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  public Integer getScore() {
    return score;
  }

  public void setScore(Integer score) {
    this.score = score;
  }
}

这个示例和之前的示例非常相似,只不过这里使用的是 UserInfo 类而不是 User 类。注意,这里没有使用 @RequestBody 注解,因此直接使用 UserInfo 类即可,而不需要使用 @RequestBody UserInfo

我们发起一条 POST 请求,请求的 body 内容为:

{
  "username": null,
  "age": 20,
  "score": 11
}

这个请求会校验失败,返回如下错误信息:

username 不能为空
score 不得超过 10

这里的校验规则也非常明显,在 UserInfo 类中,username 字段不能为空,age 字段不能为空整数,score 字段必须在 0 和 10 之间。如果有任意一个校验失败,会返回对应的错误信息。

以上就是 SpringMVC 使用 JSR-303 进行校验 @Valid 的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC 使用JSR-303进行校验 @Valid示例 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Tomcat CentOS安装实现过程图解

    下面我详细讲解一下“Tomcat CentOS安装实现过程图解”的完整攻略。 标题:Tomcat CentOS安装实现过程图解 1. 确保Java环境已经安装 在安装Tomcat之前,需要确保系统中已经安装了Java环境。可以通过以下命令检查是否已经安装了Java: java -version 如果终端输出了Java的版本信息,则说明Java已经安装成功。如…

    Java 2023年5月19日
    00
  • Java的Struts框架报错“ConfigurationResourcesNotFoundException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NoSuchModuleException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此错误。在这种情况下,需要检查文件以解决此问题。 模块错误:如果模块不正确,则可能会出现此错误。在这种情况下,需要检查模块以解决此问题。 以下是两个实例: 例 1 如果配置文件中没…

    Java 2023年5月5日
    00
  • java el简介及用法

    Java EL 简介及用法 Java Expression Language(Java EL)是用于在Java Web应用程序中计算表达式的语言。Java EL 可以在页面中引用或调用Java Bean中的属性、方法等,并能在JSP、JSF、Struts、Spring等框架中使用。 语法 Java EL 对象名称可以分为两部分:对象名称和对象属性。对象名称是…

    Java 2023年6月15日
    00
  • Java Web请求与响应实例详解

    Java Web请求与响应实例详解 概览 Java Web中的Http请求和响应机制是非常重要的一个部分,它允许Web应用程序从客户端浏览器接收请求,并向客户端浏览器发送响应。 在本文中,我们将会对Java Web请求与响应进行详细讲解,首先介绍HttpServletRequest对象和HttpServletResponse对象,然后我们将通过两条完整的示例…

    Java 2023年5月20日
    00
  • Java程序实现导出Excel的方法(支持IE低版本)

    Java程序实现导出Excel的方法是一种常用的功能,在实际开发中也比较常见。下面将在以下几方面详细阐述Java程序实现导出Excel的方法: Excel导出的基本概念 Java程序实现导出Excel的方法 一、Excel导出的基本概念 1. Excel简介 Excel是一种常用的电子表格软件,是由微软公司开发的。Excel具有良好的数据处理和计算功能,可以…

    Java 2023年6月15日
    00
  • 详解SpringBoot封装使用JDBC

    下面我来详细讲解如何在SpringBoot中封装使用JDBC。 1. 使用JDBC操作数据库 1.1 创建数据库 首先,我们需要创建一个数据库来进行操作。假设我们使用MySQL数据库,在MySQL客户端中输入以下命令来创建一个名为“test”的数据库。 CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET ut…

    Java 2023年5月19日
    00
  • Spring Boot深入分析讲解日期时间处理

    Spring Boot深入分析讲解日期时间处理 导言 在Spring Boot应用中,常常需要处理日期时间。本文将介绍Java针对日期时间的处理方式,并重点介绍了Spring Boot提供的日期时间处理方式。 Java日期时间处理 Java提供了两套日期时间处理方式: java.util.Date和java.util.Calendar java.time提供…

    Java 2023年5月20日
    00
  • java日期时间操作工具类

    Java 日期时间操作工具类 在Java开发中,经常需要进行日期时间的处理和计算。Java提供了Date和Calendar两个基础的日期时间类,但它们的使用不方便,比较繁琐。因此,在日常开发中,我们通常会使用一些日期时间操作工具类来简化日期时间的操作。本文将介绍几个比较好用的Java日期时间操作工具类。 1. joda-time Joda-Time是一款开源…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部