SpringMVC使用@Valid注解实现数据验证

这篇具有很好参考价值的文章主要介绍了SpringMVC使用@Valid注解实现数据验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、@Valid 注解的作用

  @Valid 注解是 javax.validation 包中的一个注解,它可以用来标注需要验证的数据对象。当一个带有 @Valid 注解的对象传递给 SpringMVC 的控制器方法时,SpringMVC 会自动调用验证器来验证这个对象。

二、数据验证的流程

SpringMVC 中的数据验证流程如下:

  1. 客户端发起请求。
  2. DispatcherServlet 接收到请求后,根据请求的 URL 映射到对应的 Controller。
  3. Controller 中的方法接收到请求后,如果有需要验证的数据,就使用 @Valid 注解进行标注。
  4. 如果数据验证失败,会抛出 MethodArgumentNotValidException 异常,SpringMVC 会自动将错误信息封装成 JSON 格式返回给客户端。
  5. 如果数据验证通过,Controller 方法会继续执行。

三、如何使用 @Valid 注解

  在 SpringMVC 中,我们可以在 Controller 方法的参数中使用 @Valid 注解来标注需要验证的数据对象。例如:

@RequestMapping("/user")
public String addUser(@Valid User user, BindingResult result) {
    if (result.hasErrors()) {
        // 处理验证失败的情况
    }
    // 处理验证成功的情况
}

  在上面的例子中,我们使用 @Valid 注解标注了 User 对象,当这个对象传递给 addUser 方法时,SpringMVC 会自动调用验证器来验证这个对象。验证结果会被封装成一个 BindingResult 对象,我们可以通过它来获取验证结果。

四、数据验证的规则

  在使用 @Valid 注解进行数据验证时,我们需要定义验证规则。验证规则可以通过在对应的数据对象中添加 javax.validation.constraints 包中的注解来实现。例如,我们可以在 User 类中添加如下注解:

public class User {
    @NotNull(message = "用户名不能为空")
    private String username;
    @Size(min = 6, max = 20, message = "密码长度必须在 6 到 20 个字符之间")
    private String password;
    @Email(message = "邮箱格式不正确")
    private String email;
    // 省略 getter 和 setter 方法
}

  在上面的例子中,我们使用 @NotNull、@Size 和 @Email 注解来定义了用户名、密码和邮箱的验证规则。如果这些规则被违反了,验证器会自动将错误信息封装成 BindingResult 对象返回给客户端。

五、自定义验证规则

  除了使用 javax.validation.constraints 包中的注解来定义验证规则外,我们还可以自定义验证规则。自定义验证规则需要实现 ConstraintValidator 接口,例如:

public class CheckCaseValidator implements ConstraintValidator<CheckCase, String> {
    private CaseMode caseMode;
    @Override
    public void initialize(CheckCase constraintAnnotation) {
        this.caseMode = constraintAnnotation.value();
    }
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value == null) {
            return true;
        }
        if (caseMode == CaseMode.UPPER) {
            return value.equals(value.toUpperCase());
        } else {
            return value.equals(value.toLowerCase());
        }
    }
}

  在上面的例子中,我们实现了一个 CheckCaseValidator 验证器,它可以用来验证一个字符串是否全是大写或全是小写。这个验证器需要使用 @CheckCase 注解来标注,例如:

public class User {
    @CheckCase(CaseMode.UPPER)
    private String name;
    // 省略 getter 和 setter 方法
}

  文章来源地址https://www.toymoban.com/news/detail-711882.html

到了这里,关于SpringMVC使用@Valid注解实现数据验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC的常用注解,参数传递以及页面跳转的使用

    目录 slf4j 常用注解 @RequestMapping @RequestParam @RequestBody @PathVariable 参数传递  首先在pom.xml配置文件中导入SLF4J的依赖 基础类型+String   复杂类型 @RequestParam @PathVariable @RequestBody  增删改查  返回值 void返回值  String返回值 model+String   页面跳转 --转发和重定向 SLF4J,简单日志门面

    2024年02月09日
    浏览(42)
  • Springboot——@valid 做字段校验和自定义注解

    再项目开发中,针对前端传递的参数信息,有些接口中需要写大量的 if 判断,导致代码臃肿,不够优雅。 此时,可以使用 @Valid 实现基本的字段校验。 springboot 2.3之前 ,直接进行开发即可,无需引用额外的依赖 集成在 spring-boot-starter-web 中。 springboot 2.3之后 需要额外引入

    2023年04月26日
    浏览(57)
  • Spring MVC:常用参数(注解)的使用和参数绑定的验证

    Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)(第2版) Spring MVC常用参数 Spring MVC简单应用 Spring MVC参数绑定 本实验采用的是本地安装的tomcat8.5.0版本 (1)创建maven 管理的java web工程 (2)添加本地tomcat war包 (3)实验过程 输出Hello Word 访问端口:http://localhost:8080/chapter1

    2024年02月04日
    浏览(43)
  • 【数据脱敏方案】不使用 AOP + 注解,使用 SpringBoot+YAML 实现

    在项目中遇到一个需求,需要对交易接口返回结果中的指定字段进行脱敏操作,但又不能使用 AOP+注解 的形式,于是决定使用一种比较笨的方法: 首先将所有需要脱敏字段及其对应脱敏规则存储到 Map 中。 在接口返回时,遍历结果中的所有字段,判断字段名在 Map 中是否存在

    2024年03月15日
    浏览(85)
  • 如何优雅的写代码-替代大量if else的@valid、@validated注解

    @Valid 注解通常用于对象属性字段的规则检测,具体啥意思,下面让我娓娓道来: 下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 注解用法详解。 那么,首先,我们会有一个员工对象 Employee,如下 :首先我们会有一个员工对象 Employee,如下 :

    2024年01月18日
    浏览(44)
  • 【优雅的参数验证@Validated】@Validated参数校验的使用及注解详解——你还在用if做条件验证?

    请先看看下面代码:(简单举个例子,代码并不规范) 以上代码主要是为了对用户user实体进行条件验证。 但是那么多的if, 写得纯纯得小白一个,也使得代码显得臃肿不美观不优雅! 接下来,让我们学习使用优雅的参数验证@Validated! @Valid和@Validated是Spring Validation框架提供

    2024年02月02日
    浏览(43)
  • SpringMVC 注解配置SpringMVC

    使用配置类和注解代替web.xml和SpringMVC配置文件的功能 1、创建初始化类,代替web.xml 在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这

    2024年01月24日
    浏览(42)
  • SpringMVC之注解配置SpringMVC

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好

    2024年02月01日
    浏览(44)
  • Spring 注解 和SpringMVC注解

    Spring和Spring MVC是两个紧密相关但又不同的框架,它们都使用一系列注解来简化开发。以下是Spring和Spring MVC中一些常用的注解: ### Spring 注解: 1. **`@Component`:**    - 用于将类标记为Spring容器中的组件,由Spring自动扫描并进行管理。    - 具体的派生注解有`@Service`、`@Reposit

    2024年01月23日
    浏览(56)
  • 对接第三方接口鉴权(Spring Boot+Aop+注解实现Api接口签名验证)

    一个web系统,从接口的使用范围也可以分为对内和对外两种,对内的接口主要限于一些我们内部系统的调用,多是通过内网进行调用,往往不用考虑太复杂的鉴权操作。但是,对于对外的接口,我们就不得不重视这个问题,外部接口没有做鉴权的操作就直接发布到互联网,而

    2024年04月29日
    浏览(93)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包