栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java数据校验

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java数据校验

数据校验 element前端自定义校验规则
  • :rules=“dataRule” 绑定数据校验规则方法

  •  
    firstLetter: [
              {
                validator: (rule, value, callback) => {
                    if (value == "") {
                      callback(new Error("首字母必须填写不能为空"));
                    } else if (!/^[a-zA-Z]$/.test(value)) {
                      callback(new Error("首字母必须a-z或者A-Z之间"));
                    } else {
                      callback();
                    }
                },
                trigger: 'blur'
              }
            ],
    
  • firstLetter是prop属性值 validator自定义校验规则 trigger 出发时间 rule 当前自定义校验规则对象 callback 回调函数

后端数据校验 使用JSR303规则进行校验 什么是jsr 303

图片加载不出来不知道为啥

  • jsr303 常用注解

…

以上是 bean validation自带的注解hibernate validation 在上面的基础上增加了一些注解

简单校验
  • 引入pom依赖

     
                org.springframework.boot
                spring-boot-starter-validation
            
    
  • 在需要进行数据校验的类中添加注解,例如:

    package com.cui.gulimall.modules.product.dto;
    
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    
    import javax.validation.constraints.NotEmpty;
    import java.io.Serializable;
    import java.util.Date;
    
    
    
    @Data
    @ApiModel(value = "品牌")
    public class BrandDTO implements Serializable {
        private static final long serialVersionUID = 1L;
    
    	@ApiModelProperty(value = "品牌id")
    	private Long brandId;
    
    	@ApiModelProperty(value = "品牌名")
    	@NotEmpty
    	private String name;
    
    	@ApiModelProperty(value = "品牌logo地址")
    	private String logo;
    
    	@ApiModelProperty(value = "介绍")
    	private String descript;
    
    	@ApiModelProperty(value = "显示状态[0-不显示;1-显示]")
    	private Integer showStatus;
    
    	@ApiModelProperty(value = "检索首字母")
    	private String firstLetter;
    
    	@ApiModelProperty(value = "排序")
    	private Integer sort;
    
    
    }
    
  • 在controller层中添加 @Validated注解或者@Valid 开启数据校验

      @PostMapping("save")
        @ApiOperation("保存")
        @LogOperation("保存")
        public Result save(@Validated @RequestBody  BrandDTO dto,
                           BindingResult bindingResult) {
            System.out.println(ObjectUtils.isEmpty(bindingResult));
    
            if (bindingResult.hasErrors()) {
                List fieldErrors = bindingResult.getFieldErrors();
                System.out.println(fieldErrors.isEmpty());
    
                return new Result().error("数据校验失败");
            }
            //效验数据
            ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
    
            brandService.save(dto);
    
            return new Result();
        }
    
  • BindingResult 封装了数据校验结果等信息 hasErrors 获得数据校验结果 如果校验失败返回false

  • 在进行数据校验的时候一定要看清参数位置写的是哪个类不然就会像我这个虎比一样找半天没注意参数位置

分组校验
  • 列入:当我们添加数据时不需要上传用户id但是当我们修改数据时需要根据用户id修改,所以需要有两组不同的校验规则

  • 每一个校验注解都含有这三个属性

    String message() default "{javax.validation.constraints.NotEmpty.message}";
    
    	Class[] groups() default { };
    
    	Class[] payload() default { };
    

    其中groups为分组的属性, 类型为Class[]没有什么特殊意义所以只需要定义几个接口来区分不同分组的校验规则

  • 数据接收类代码

    package com.cui.gulimall.modules.product.dto;
    
    import com.cui.gulimall.modules.product.check.AddCheck;
    import com.cui.gulimall.modules.product.check.ModifyCheck;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    import org.hibernate.validator.constraints.URL;
    
    import javax.validation.constraints.*;
    import java.io.Serializable;
    import java.util.Date;
    
    
    
    @Data
    @ApiModel(value = "品牌")
    public class BrandDTO implements Serializable {
        private static final long serialVersionUID = 1L;
    
    	@ApiModelProperty(value = "品牌id")
    	@NotNull(message = "id不能为空",groups = {ModifyCheck.class})
    	@Null(message = "新增品牌id不能指定",groups = {AddCheck.class})
    	private Long brandId;
    
    	@ApiModelProperty(value = "品牌名")
    	@NotEmpty(message = "品牌名称不能为空",groups = {AddCheck.class,ModifyCheck.class})
    	private String name;
    
    	@ApiModelProperty(value = "品牌logo地址")
    	@URL(message = "logo地址不能为空" ,groups = {AddCheck.class,ModifyCheck.class})
    	private String logo;
    
    	@ApiModelProperty(value = "介绍")
    	private String descript;
    
    	@ApiModelProperty(value = "显示状态[0-不显示;1-显示]")
    	@NotNull(groups = {AddCheck.class},message = "显示状态不能为空")
    	@Min(value = 0,groups = {AddCheck.class,ModifyCheck.class},message = "该数据只能为0或1")
    	@Max(value = 1,groups = {AddCheck.class,ModifyCheck.class},message = "该数据只能为0或1")
    	private Integer showStatus;
    
    	@ApiModelProperty(value = "检索首字母")
    	@Pattern(regexp = "^[a-zA-Z]$",message = "必须是一个字母",groups = {AddCheck.class, ModifyCheck.class})
    	private String firstLetter;
    
    	@ApiModelProperty(value = "排序")
    	@Min(value = 0,message = "排序数字必须大于0",groups = {AddCheck.class, ModifyCheck.class})
    	private Integer sort;
    
    
    }
    
  • 控制层代码

     @PostMapping("save")
        @ApiOperation("保存")
        @LogOperation("保存")
        public Result save(@Validated(AddCheck.class) @RequestBody BrandDTO dto,
                           BindingResult bindingResult) {
            System.out.println(ObjectUtils.isEmpty(bindingResult));
    
            if (bindingResult.hasErrors()) {
                List fieldErrors = bindingResult.getFieldErrors();
    
                Map map = new HashMap<>();
    
                fieldErrors.forEach(fieldError -> {
                    map.put(fieldError.getField(), fieldError.getDefaultMessage());
                });
                return new Result().error(map);
            }
            //效验数据
            ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
    
            brandService.save(dto);
    
            return new Result();
        }
    
  • 嵌套校验:就是在一个类中需要包含另一个类,而另一个类也需要校验. 需要在那个类的属性也需要校验 只需在那个嵌套的类属性上添加@Valid 如果不添加则不会校验

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/949200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号