✅P65_品牌管理-表单校验-自定义校验器
大约 3 分钟
生活不易,且行且珍惜。又是熬夜的一晚!
表单校验
src\views\modules\product\brand-add-or-update.vue
在前面章节已经加入了表单校验规则,此处复习一下即可。
将“显示状态”传值改为 1 和 0 : :active-value="1"
:inactive-value="0"
<el-form-item label="显示状态" prop="showStatus">
<el-switch
v-model="dataForm.showStatus"
active-color="#13ce66"
inactive-color="#ff4949"
:active-value="1"
:inactive-value="0"
></el-switch>
</el-form-item>
修改校验规则 dataRule
中的 firstLetter
dataRule: {
name: [{ required: true, message: "品牌名不能为空", trigger: "blur" }],
logo: [
{ required: true, message: "品牌logo地址不能为空", trigger: "blur" },
],
descript: [
{ required: true, message: "介绍不能为空", trigger: "blur" },
],
showStatus: [
{
required: true,
message: "显示状态[0-不显示;1-显示]不能为空",
trigger: "blur",
},
],
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"
}
],
sort: [
{
validator: (rule, value, callback) => {
if (value == "") {
callback(new Error("排序字段必须填写"));
} else if (!Number.isInteger(value) || value < 0) {
callback(new Error("排序必须是一个大于等于0的整数"));
} else {
callback();
}
},
trigger: "blur"
}
]
JSR303数据校验
JSR303: Java数据校验规范提案
- jsr,是Java Specification Requests的缩写,意思是Java规范提案,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求
- 303号规定了数据校验的标准
引入依赖
cfmall-common/pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.3.2.RELEASE</version>
</dependency>
实体类上增加校验注解
cfmall-product/src/main/java/com/gyz/cfmall/product/entity/BrandEntity.java
package com.gyz.cfmall.product.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import org.hibernate.validator.constraints.URL;
import javax.validation.constraints.*;
/**
* 品牌
*
* @author gong_yuzhuo
* @email gongyuzhcho@163.com
* @date 2021-10-17 10:17:22
*/
@Data
@TableName("pms_brand")
public class BrandEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 品牌id
*/
@TableId
private Long brandId;
/**
* 品牌名
*/
@NotBlank(message = "品牌名必须提交")
private String name;
/**
* 品牌logo地址
*/
@NotEmpty
@URL(message = "logo必须是一个合法的url地址")
private String logo;
/**
* 介绍
*/
private String descript;
/**
* 显示状态[0-不显示;1-显示]
*/
private Integer showStatus;
/**
* 检索首字母
*/
@NotEmpty
@Pattern(regexp = "/^[a-zA-Z]$/",message = "检索首字母必须是一个字母")
private String firstLetter;
/**
* 排序
*/
@Min(value = 0,message = "排序必须是大于等于0")
@NotNull
private Integer sort;
}
BrandController.java
规范校验错误时返回结果
/**
* 保存
*
* 开启校验功能@Valid. 效果:校验错误以后会有默认的响应;
* 给校验的参数bean后紧跟一个BindingResult,就可以获取到校验的结果
*/
@RequestMapping("/save")
public R save(@Valid @RequestBody BrandEntity brand, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
Map<String, String> map = new HashMap<>();
//1、获取错误的校验结果
bindingResult.getFieldErrors().forEach(item -> {
//2、FiledError获取到错误提示
String message = item.getDefaultMessage();
//3、获取错误的属性名
String field = item.getField();
map.put(field, message);
});
return R.error(400, "提交的数据不合法").put("data", map);
} else {
brandService.save(brand);
}
return R.ok();
}
测试
postman测试
url:http://localhost:88/api/product/brand/save