springboot字段校验,springboot参数校验框架

  springboot字段校验,springboot参数校验框架

  00-1010 1.后端为什么要进行数据校验?2.如何使用数据验证?(要添加相应的依赖关系)(1)在实体上的属性中添加验证注释:(2)在控制器层的方法之前添加comments @Validated开始数据验证;(3)如果每种方法要验证的参数不同,可以使用分组验证。实现手机号码的数据验证:1。用户定义的注释:2。定义数字的验证类别;3.用户定义的验证规则;4.捕捉数据校验抛出的异常:当参数对象包含集合时,如何对集合中的每个属性进行校验汇总?

  00-1010如果添加新数据,会直接在前端页面添加。因为前端代码中有设置数据不能为空,所以不会传入空值。但是当一个新的数据不是通过前端页面添加的时候,比如使用swagger,直接访问后端,当某个值为空的时候,可能会传入数据库,这样会产生一些问题。

  

目录

依赖性groupIdorg.springframework.boot/groupId artifactId spring-boot-starter-validation/artifactId version2.3.2.RELEASE/version/dependency

 

  

1.为什么后端要进行数据校验?

 

  

2.怎么使用数据校验?(要添加对应依赖)

 

  实体类上的00-1010:

  每个数据包都应该创建一个相应的接口:

  图层打开分组验证:

  @Validated批注支持多个分组。

  @Valid批注不支持分组检查。

  

(1)在实体上的属性上添加校验注解:

 

  

(2)在controller层的方法前加上注解@Validated开启数据校验

导入com . sec kill . validator . ismobilevalidator;导入javax . validation . constraint;导入javax . validation . payload;导入Java . lang . annotation . *;@Target({ElementType。方法,ElementType。字段,元素类型。ANNOTATION_TYPE,ElementType。构造函数,ElementType。参数,元素。type _ use}) @ retention(保留策略。运行时)@ documented @ constraint(验证者={ismobilevalidator。class}) public @ interface是mobile {//默认为true boolean required()默认为true;Message()默认“手机号码格式错误”;班级?[]组()默认{ };班级?扩展负载[]负载()默认值{ };}

 

  

(3)如果每个方法要校验的参数不同,可以使用分组校验。

导入org . thyme leaf . util . string utils;导入Java . util . regex . matcher;导入Java . util . regex . pattern;/** *描述:手机号码验证* date : 2022/6/28 15:28 * */public类phone number validator {//正则表达式private sta

 

  tic final Pattern mobile_pattern=Pattern.compile("^1(3[0-9]5[0-3,5-9]7[0-3,5-8]8[0-9])\d{8}$"); public static boolean isMobile(String mobile){ if(StringUtils.isEmpty(mobile)){ return false; } Matcher matcher = mobile_pattern.matcher(mobile); return matcher.matches(); }}

 

  

3.自定义校验规则

import com.seckill.annotations.IsMobile;import com.seckill.utils.PhoneNumberValidator;import org.thymeleaf.util.StringUtils;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;/** * Description:自定义校验规则 * Date: 2022/6/28 16:59 **/public class IsMobileValidator implements ConstraintValidator<IsMobile,String> { private boolean required=false; @Override public void initialize(IsMobile constraintAnnotation) { //先获取到填的值 true/false required=constraintAnnotation.required(); } @Override public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {// 判断是否为必填 if(required){ //必填 return PhoneNumberValidator.isMobile(s); }else { //非必填 if(StringUtils.isEmpty(s)){ //非必填时填的值为空时 return true; }else{ //非必填时填的值不为空时 return PhoneNumberValidator.isMobile(s); } } }}

 

  

4.捕获数据校验抛出的异常:

/** * Description:全局异常处理类 * Date: 2022/6/28 17:35 **/@RestControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseBean ExceptionHandler(Exception e){ if(e instanceof GlobalException){ GlobalException ex= (GlobalException) e; return ResponseBean.error(ex.getResponseBeanEnum()); //处理参数校验抛出的异常 BindException }else if(e instanceof BindException){ BindException ex= (BindException) e; ResponseBean res=ResponseBean.error(ResponseBeanEnum.BINDING_ERROR); res.setMessage("参数校验异常:"+ex.getAllErrors().get(0).getDefaultMessage()); return res; } return ResponseBean.error(ResponseBeanEnum.ERROR); }}

 

  在属性上使用这个注解:

  

 /** 选手联系电话 */ @IsMobile(message = "联系电话格式不正确") @NotNull(message = "手机号不能为空") @Excel(name = "选手联系电话") private String phoneNumber;

然后在Controller类上或者方法传入的参数前加@Validated或@Valid注解来开启参数校验。

 

  

 

  

入参对象包含集合时,怎么对集合中的每个属性进行校验

controller层:

 

  加上@Validated

  

 @PostMapping public AjaxResult addInfo(@RequestBody @Validated TeamInfoDto teamInfoDto) { return toAjax(comTeamService.insert(teamInfoDto)); }

实体类中:

 

  在要校验的集合属性上加@Valid这个注解,否则它只会校验这个集合中元素是否为空,不会校验集合中各个元素

  

@Datapublic class TeamInfoDto {@NotEmpty(message = "选手信息不能为空") @Valid private List<ComUser> user;}

对集合中元素数据的限制设置:

 

  在ComUser实体类中:

  在想要校验的属性上加上对应注解

  

public class ComUser extends BaseEntity{ private static final long serialVersionUID = 1L; private Long id; /** 选手姓名 */ @NotNull(message = "姓名不能为空") private String name; /** 选手联系电话 */ @NotNull(message = "手机号不能为空") @IsMobile(message = "手机格式不正确") private String phoneNumber; /** 邮箱 */ @NotEmpty(message = "邮箱不能为空") private String email;}

 

  

总结

到此这篇关于SpringBoot后端数据校验的文章就介绍到这了,更多相关SpringBoot后端数据校验内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: