validator参数效验器

什么是Validator参数效验器,为什么要用?

编码实现对用户名、密码、邮箱、身份证、手机号码的Validator的效验

实现一个手机号码的自定义效验

把validator异常加入全局异常处理器

 

背景:经常要对接口的参数做效验,登录的时候要效验用户名、密码是否为空,但是这种日常的接口参数效验太繁琐了,代码繁琐又多

 

就是采用Validator框架,少写代码,提升开发效率,例如email效验,用户名长度必须6到12之间等等,专门用来做参数的效验的

JSR-303验证规范,参数效验规范

springboot有3个特征:

1JSR303特征,是一项标准,只提供规范不提供实现,规定一些效验规范即效验注解,如@Null,@NotNull,@Pattern

hibernate validation特性

spring validation对hibernate validation进行了二次封装,在springmvc模块中添加了自动效验,并将验证消息封装进了特定的类中

 

步骤1:pom文件添加依赖

org.springframework.boot

spring-boot-starter-web

springboot天然支持validator数据效验

 

2创建一个VO类

UserVO,类中通过注解写入数据验证格式

 

3加一个体验类,一定要加上@Validated注解,它的作用是用来效验UserVO的参数是否正确

public void createUser(@RequestBody @Validated UserVO userVO){

 

}

 

 

 

步骤2:

 

 

自定义validator注解

写一个对手机号码的validator注解

创建一个@interface的手机效验注解

实现一个实现该接口的实现类

给UserVO类,加上手机号码效验注解

体验效果

 

把validator加入全局异常处理器

 

validator的异常特别复杂,客户端都看不懂,不友好,必须加入全局异常处理器

 

1全局异常处理器加入validator异常处理validarot统一异常封装
 

package com.example.demo.Controller;



import lombok.Data;

import org.hibernate.validator.constraints.Length;



import javax.validation.constraints.Email;

import javax.validation.constraints.NotEmpty;

import javax.validation.constraints.Pattern;

import java.util.Date;



@Data

public class UserVO {

private Integer id;

@NotEmpty(message = "用户名不能为空")

@Length(min = 6,max = 12,message = "用户名长度必须在6-12之间")

private String username;



@NotEmpty(message = "密码不能为空")

@Length(min = 6,message = "密码长度不能小于6位")

private String password;



@Email(message = "请输入正确的邮箱")

private String email;



@Pattern(regexp = "^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$",message = "身份证格式错误")

private String idCard;



private Byte sex;

private Byte deleted;

private Date updateDate;

private Date createTime;

}







package com.example.demo.Controller;



import org.springframework.validation.annotation.Validated;

import org.springframework.web.bind.annotation.*;



@RestController

@RequestMapping("/user")

public class UserController {

@PostMapping(value = "/user/create")

public void createUser(@RequestBody @Validated UserVO userVO){



}

}

 

 

2全局异常参数效验,在全局异常处理器中加入

@ResponseStatus(HttpStatus.BAD_REQUEST)

@ExceptionHandler(MethodArgumentNotValidException.class)

public ErrorResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e,HttpServletRequest request){

String msgs = this.handle(e.getBindingResult().getFieldErrors());

ErrorResult error = ErrorResult.fail(ResultCode.PARAM_IS_INVALID,e,msgs);

log.warn("URL:{参数效验异常}",request.getRequestURI(),msgs);

return error;

}



private String handle(List<FieldError> fieldErrorList){

StringBuilder sb = new StringBuilder();

for(FieldError obj:fieldErrorList){

sb.append(obj.getField());

sb.append("=[");

sb.append(obj.getDefaultMessage());

sb.append("] ");

}

return sb.toString();

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
antd 的 validator 参数是用于表单验证的。它可以是一个函数或者是一个包含验证规则的数组。 1. 函数形式的 validator 参数: 该函数接收表单字段的值作为参数,并返回一个错误信息字符串或一个 Promise 对象。如果返回字符串,则表示验证失败并显示该字符串作为错误信息;如果返回 Promise 对象,则可以异步验证字段,当 Promise 对象 resolve 时,表示验证通过;当 Promise 对象 reject 时,将会显示 reject 的值作为错误信息。 示例: ```jsx const validateUsername = (rule, value) => { if (!value) { return '用户名不能为空'; } if (value.length < 6) { return '用户名长度不能少于6个字符'; } // 异步验证示例 return new Promise((resolve, reject) => { // 异步验证逻辑 // resolve() 表示验证通过 // reject('验证失败') 表示验证失败并显示该错误信息 }); } // 使用 validator 参数 <Form.Item label="用户名" name="username" rules={[{ validator: validateUsername }]}> <Input /> </Form.Item> ``` 2. 数组形式的 validator 参数: 数组中每个对象表示一个验证规则,对象的属性包括: - validator: 验证函数,与函数形式的 validator 参数相同。 - message: 验证失败时的错误信息。 示例: ```jsx const validateUsername = (rule, value) => { if (!value) { throw new Error('用户名不能为空'); } if (value.length < 6) { throw new Error('用户名长度不能少于6个字符'); } } // 使用 validator 参数 <Form.Item label="用户名" name="username" rules={[{ validator: validateUsername, message: '用户名验证失败' }]}> <Input /> </Form.Item> ``` 这些是 antd 中 validator 参数的基本用法,你可以根据具体的需求自定义验证规则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值