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日

相关文章

  • 详解Spring Data JPA中Repository的接口查询方法

    Sure!下面是关于“详解Spring Data JPA中Repository的接口查询方法”的完整攻略: 1、什么是Spring Data JPA Spring Data JPA是Spring上建立的一套基于JPA规范的框架,主要用于简化JPA数据访问层的开发,封装了大量复杂的数据访问操作,同时也保证了极高的数据安全性和性能表现。 2、什么是Reposit…

    Java 2023年5月20日
    00
  • Java OpenCV利用KNN算法实现图像背景移除

    让我来为您详细讲解“Java OpenCV利用KNN算法实现图像背景移除”的完整攻略。 1. 简介 1.1 OpenCV OpenCV是一个跨平台的计算机视觉库。它可以用于实时图像处理、计算机视觉、机器学习和人工智能等场景。OpenCV支持多种编程语言,如C++、Python、Java等。 1.2 KNN算法 KNN算法是一种基于数据的分类和回归方法。在分类…

    Java 2023年5月19日
    00
  • 使用maven运行Java Main的三种方法解析

    使用maven可以快速地构建Java项目,运行Java Main也是其中的一项基础操作。本文将介绍基于maven运行Java Main的三种方法:使用exec-maven-plugin、使用maven-shade-plugin、使用maven-assembly-plugin。下面我们逐一分析这三种方法: 使用exec-maven-plugin exec-ma…

    Java 2023年5月26日
    00
  • SpringBoot整合mybatis的方法详解

    下面我来为你详细讲解“SpringBoot整合mybatis的方法详解”的完整攻略。 准备工作 在maven中引入spring-boot-starter-jdbc、mybatis-spring-boot-starter、mysql-connector-java等依赖。 在application.properties中配置数据库信息和mybatis配置。 sp…

    Java 2023年5月19日
    00
  • Java中的Graphics2D类基本使用教程

    接下来我将为你详细讲解Java中的Graphics2D类基本使用教程。Graphics2D类是Java图形库中比较重要的一个类,它可以用于绘制二维图形,包括直线、多边形、文字、图像等等。Graphics2D类是Graphics类的子类,它可以在Graphics基础上提供更丰富和更高级的图形绘制功能。 1. Graphics2D类的创建 要使用Graphics…

    Java 2023年5月26日
    00
  • SpringDataJpa的使用之一对一、一对多、多对多 关系映射问题

    下面是SpringDataJpa关系映射的完整攻略。 一对一 1. 创建实体类 我们在使用SpringDataJpa中的一对一关系映射时,需要创建两个实体类,实体类之间通过@OneToOne建立映射关系。 我们以学生和身份证为例: @Entity public class Student { @Id private Long id; private Stri…

    Java 2023年6月3日
    00
  • 如何基于Java实现对象List排序

    当我们需要对一个对象List进行排序时,可以使用Java提供的Collections.sort()方法来完成排序操作。以下是基于Java实现对象List排序的完整攻略: 1. 定义一个对象类 首先,我们需要定义一个对象类,并实现Comparable接口。比较方式可以根据具体需求进行定义。假设我们要对学生对象进行排序,比较方式为按照学生年龄从小到大排序,则可以…

    Java 2023年5月26日
    00
  • Sprint Boot @SessionAttribute使用方法详解

    Spring Boot的@SessionAttribute的作用与使用方法 在Spring Boot中,@SessionAttribute注解用于将模型属性存储在HTTP会话中。通过使用@SessionAttribute注解,可以方便地在多个请求之间共享模型属性。在本文中,我们将详细介绍@SessionAttribute注解的作用和使用方法,并提供两个示例。…

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