当前位置: 首页 > news >正文

002 validation自定义校验器

文章目录

    • pom.xml
    • ValidatorUtil.java
    • IsMobileValidator.java
    • IsMobile.java
    • LoginVo.java
    • LoginController.java

pom.xml

<!-- 引入validation依赖,完成校验 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.4.5</version></dependency>

ValidatorUtil.java

package com.example.util;import org.junit.jupiter.api.Test;
import org.springframework.util.StringUtils;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** 完成一些校验,比如手机号格式是否正确* 正则*/
public class ValidatorUtil {//校验手机号码的正则表达式private static final Pattern mobile_pattern = Pattern.compile("^[1][3-9][0-9]{9}$");//编写方法public static boolean isMobile(String mobile) {if(!StringUtils.hasText(mobile)) {return false;}Matcher matcher = mobile_pattern.matcher(mobile);return matcher.matches();}//测试校验方法@Testpublic void t1() {String mobile = "0133333333";System.out.println(isMobile(mobile));String mobile2 = "13333333333";System.out.println(isMobile(mobile2));}}

IsMobileValidator.java

package com.example.validator;import org.springframework.util.StringUtils;
import com.example.util.ValidatorUtil;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;//拟定注解 IsMobile   的校验规则, 可以自己根据业务需求来编写..
public class IsMobileValidatorimplements ConstraintValidator<IsMobile, String> {private boolean required = false;@Overridepublic void initialize(IsMobile constraintAnnotation) {//初始化required = constraintAnnotation.required();}@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {//必填if (required) {return ValidatorUtil.isMobile(value);} else {//非必填if (!StringUtils.hasText(value)) {return true;} else {return ValidatorUtil.isMobile(value);}}}
}

IsMobile.java


package com.example.validator;import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;/*** IsMobile: 开发一个自定义的注解*/
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IsMobileValidator.class})
public @interface IsMobile {String message() default "手机号码格式错误";boolean required() default true;Class<?>[] groups() default { };//默认参数Class<? extends Payload>[] payload() default { };//默认参数
}

LoginVo.java


package com.example.vo;import com.example.validator.IsMobile;
import lombok.Data;
import org.hibernate.validator.constraints.Length;import javax.validation.constraints.NotNull;/*** 接收用户登录时,发送的信息(moblie,password)*/
@Data
public class LoginVo {//对LoginVo的属性值进行约束@NotNull@IsMobileprivate String mobile;@NotNull@Length(min = 32)private String password;}

LoginController.java


package com.example.controller;import com.example.service.UserService;
import com.example.vo.LoginVo;
import com.example.vo.RespBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;@Controller
@RequestMapping("/login")
@Slf4j
public class LoginController {//装配UserService@Resourceprivate UserService userService;//编写方法,可以进入到登录页面@RequestMapping("/toLogin")public String toLogin() {return "login";//到templates/login.html}//处理用户登录请求@RequestMapping("/doLogin")@ResponseBodypublic RespBean doLogin(@Valid LoginVo loginVo,HttpServletRequest request,HttpServletResponse response) {System.out.println("controller层:"+loginVo);//log.info("{}",loginVo);return userService.doLogin(loginVo,request,response);}}
http://www.lryc.cn/news/342467.html

相关文章:

  • SQL-Server数据库--视图
  • Flink 部署模式
  • 第十三节:Vben Admin实战-系统管理之菜单管理
  • 2024------MySQL数据库基础知识点总结
  • 机器学习之基于Jupyter中国环境治理投资数据分析及可视化
  • 【Word】写论文,参考文献涉及的上标、尾注、脚注 怎么用
  • 能将图片转为WebP格式的WebP Server Go
  • 省份数量00
  • Android Native内存泄漏检测方案详解
  • 有限单元法-编程与软件应用(崔济东、沈雪龙)【PDF下载】
  • 蓝桥杯练习系统(算法训练)ALGO-950 逆序数奇偶
  • uniapp踩坑 uni.showToast 和 uni.showLoading
  • BIGRU、CNN-BIGRU、CNN-BIGRU-ATTENTION、TCN-BIGRU、TCN-BIGRU-ATTENTION合集
  • 通过 Java 操作 redis -- 基本通用命令
  • Jenkins集成Kubernetes 部署springboot项目
  • 个股期权是什么期权?个股期权什么时候推出?
  • TCP UDP
  • PCIE协议-1
  • [C++][PCL]pcl安装包预编译包国内源下载地址
  • 海洋行业工业气体检测传感器的重要性
  • 免费在线录屏、无需注册、免费可用、无限制
  • 5V升9V2A升压恒压WT3231
  • Java中枚举类的使用详解
  • C++11 设计模式6. 建造者模式,也叫做生成器模式
  • GPS与精致农业 无人机应用 农业遥感 农业类
  • Kotlin注解简介
  • 代码随想录训练营
  • java中的变量、数据类型、人机交互
  • Python中的生成器是什么
  • 【Camera2完整流程分析四】从log角度分析CameraService启动流程