首页 > 其他分享 >spring - mvc - @Valid

spring - mvc - @Valid

时间:2024-03-09 11:11:44浏览次数:19  
标签:String 验证 spring 我们 注释 mvc Valid contactField public

自定义验证
创建自定义验证器需要推出我们自己的注释并在我们的模型中使用它来强制执行验证规则。
因此,让我们创建自定义验证器来检查电话号码。电话号码必须是至少 8 位数字,但不超过 11 位数字。

1.新注释

让我们创建一个新的@interface 来定义我们的注释:

@Documented
@Constraint(validatedBy = ContactNumberValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ContactNumberConstraint {
    String message() default "Invalid phone number";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

使用@Constraint注释,我们定义了将验证我们的字段的类。message ()是显示在用户界面中的错误消息。最后,附加代码大部分是样板代码,以符合 Spring 标准。

2.创建验证器

现在让我们创建一个验证器类来强制执行验证规则:

public class ContactNumberValidator implements 
  ConstraintValidator<ContactNumberConstraint, String> {

    @Override
    public void initialize(ContactNumberConstraint contactNumber) {
    }

    @Override
    public boolean isValid(String contactField,
      ConstraintValidatorContext cxt) {
        return contactField != null && contactField.matches("[0-9]+")
          && (contactField.length() > 8) && (contactField.length() < 14);
    }

}

验证类实现ConstraintValidator接口,还必须实现isValid方法;我们在这个方法中定义了验证规则。
当然,我们在这里使用一个简单的验证规则来展示验证器的工作原理。
ConstraintValidator定义验证给定对象的给定约束的逻辑。实施必须遵守以下限制:
对象必须解析为非参数化类型
对象的泛型参数必须是无界通配符类型

3.应用验证注释

在我们的例子中,我们创建了一个简单的类,其中有一个字段来应用验证规则。在这里,我们设置要验证的带注释的字段:

@ContactNumberConstraint
private String phone;

我们定义了一个字符串字段并使用自定义注释@ContactNumberConstraint对其进行注释。在我们的控制器中,我们创建了映射并处理了任何错误:

@Controller
public class ValidatedPhoneController {
 
    @GetMapping("/validatePhone")
    public String loadFormPage(Model m) {
        m.addAttribute("validatedPhone", new ValidatedPhone());
        return "phoneHome";
    }
    
    @PostMapping("/addValidatePhone")
    public String submitForm(@Valid ValidatedPhone validatedPhone,
      BindingResult result, Model m) {
        if(result.hasErrors()) {
            return "phoneHome";
        }
        m.addAttribute("message", "Successfully saved phone: "
          + validatedPhone.toString());
        return "phoneHome";
    }   
}

我们定义了这个具有单个JSP页面的简单控制器,并使用SubmitForm方法来强制验证我们的电话号码。

标签:String,验证,spring,我们,注释,mvc,Valid,contactField,public
From: https://www.cnblogs.com/dkpp/p/18062404

相关文章

  • springboot项目构建docker镜像
    springboot项目构建docker镜像springboot项目构建成docker镜像的两种方式手动方式:将springboot项目打成一个jar包,将jar包上次到服务器的指定目录下(具备docker环境),然后在同一目录下编写Dockerfile文件,通过dockerbuild命令构建镜像,之后把镜像发布到远程仓库中。半自动方式:......
  • SpringCloud Gateway实战
    SpringCloudGateway目录SpringCloudGateway认识SpringCloudGatewaySpringCloudGateway和Zuul最核心的区别SpringCloudGateway工作模型图及解读SpringCloudGateway三大核心概念Route、Predicate、FilterSpringCloudGateway过滤器全局过滤器和局部过滤器SpringCloudGatew......
  • 基于苍穹外卖写的springboot学习笔记,私聊拿源码
    一.关于md5加密的了解与使用1.分析MD5加密是一种不可逆的加密算法。也就是说我们只能正向加密,无法反向解密。于是乎,当我们用它作为密码加密方式时,我们只能加密码从数据库拿来与前端传来的数据加密后进行比较。2.使用方法他是由springboot框架提供二.关于swagge......
  • Spring-Boot AOP 的简单创建
    AOP切面1.导依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>定义一个切面类@Aspect@ComponentpublicclassAop......
  • MySQL(六):MySQL之MVCC
    1、事务的引入事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再进行分割),由一个有限的数据库操作序列构成(多个DML语句),要不全部成功,要不全部不成功。如:A给B划钱,A的账户-100元,B的账户就要+100元,这两个update语句必须作为一个整体来执行,不然A扣钱了,B没有加......
  • spring-event-事件监听机制实现
    1.事件监听机制概述1.场景模型版本更新了,新版本需要继承老版本的构件分享、自定义属性、着色数据,以后还可能有其他数据要继承,这些数据之间没有直接联系,就是当模型版本变更的时候,他们各自需要执行。2.涉及的三个对象事件源(提供事件处理时的元数据)这里就是模型版本更新了......
  • Spring知识回顾
    首先对于我们来说Spring是什么,Spring可以让我们对刚开始写项目时,有一个明确的框架结构,用比较专业的话来讲,就是使用IOC和AOP,即Inversionofcontrol控制反转和AspectOrientedProgramming面向切面编程,总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。学习IOC的组......
  • springboot项目接入普罗米修斯
    为了更好查询项目的运行状态,这次引入普罗米修斯监控pom依赖<!--starter-actuator--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency><!--下面是/actuato......
  • springboot 2.4.0 启动源码分析
    SpringBoot启动的基本配置SpringBoot启动的配置主要有以下两个部分添加依赖最基本的springboot依赖只需要添加一个springboot启动器的依赖即可,如果是web服务则添加web的启动器<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"......
  • springboot整合nacos注册中心和配置中心
    我的命名空间是centos效果图   可以是yml格式,名称不要变springboot版本2.1.6pom依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchem......