Java前后端数据校验培训

培训目的

  1. 如何进行前后端校验
  2. 提高开发效率
  3. 避免重复造轮子
  4. 统一开发规范
  5. 保证系统安全

工作成果

  1. 前端校验demo
  2. 后端校验demo
  3. 工具类的封装

使用教程

前端校验

demo演示图

1. 空内容校验
什么也不输入,点击确定 或者 失去焦点都会出现“请输入课程名”的提示
在这里插入图片描述
2. 字符长度校验
输入字符过多,点击确定 或者 失去焦点都会出现“长度在2到5个字符”的提示
在这里插入图片描述
3. 唯一性校验
数据中已经有了语文,如果再添加语文,会提示课程名已存在
在这里插入图片描述
在这里插入图片描述

前端代码

  1. 表单代码
<el-dialog
  title="提示"
  :visible.sync="dialogVisible"
  width="30%"
  :before-close="handleClose"
>
  <el-form
    ref="courseRules"
    :model="course"
    :rules="rules"
    label-width="150px"
    label-position="right"
  >
    <el-form-item label="课程名(前台校验)" prop="courseName">
      <el-input v-model="course.courseName" placeholder="" />
    </el-form-item>
    <el-form-item label="备注(后台校验)">
      <el-input v-model="course.memo" placeholder="" />
    </el-form-item>
  </el-form>
  <span slot="footer" class="dialog-footer">
    <el-button @click="cancel('courseRules')">取 消</el-button>
    <el-button type="primary" @click="save('courseRules')">确 定</el-button>
  </span>
</el-dialog>
  1. js代码
const courseDefault = {
  courseName: '',
  memo: '',
  student: {
    studentName: '张三'
  }
}

data() {
   // 自定义校验规则
   var validCourseName = (rule, value, callback) => {
     // console.log(rule,value,callback)
     CourseApi.queryByCourseName(value).then(res => {
       // res.data表示从后台根据课程名查询到的课程数量,如果有课程数量,表示已经存在
       if (res.data.status !== 20001005) {
         callback(res.data.message)
       } else {
         callback()
       }
     })
   }
   return {
     course: Object.assign({}, courseDefault),
     rules: {
       courseName: [
         { required: true, message: '请输入课程名称', trigger: 'blur' },
         { min: 2, max: 5, message: '长度在 2 到 5 个字符', trigger: 'blur' },
         { validator: validCourseName, trigger: 'blur' }
       ]
     }
   }
 },
 methods: {
	 save(formName) {
	     this.$refs[formName].validate((valid) => {
	       if (valid) {
	         CourseApi.save(this.course).then(res => {
	           this.queryPage(this.queryParam)
	           this.dialogVisible = false
	         }).catch(err => {
	           console.log(err)
	           this.dialogVisible = false
	         })
	       } else {
	         console.log('error submit!!')
	         return false
	       }
	     })
	},
	 resetForm(formName) {   // 重置验证
      this.$refs[formName].clearValidate()
    },
     handleClose(done) {  // 关闭表单的时候,重置验证
      // this.$confirm('确认关闭?')
      //   .then(_ => {
      //     done()
      //   })
      //   .catch(_ => {})
      this.resetForm('courseRules')
      done()
    },
}

后台校验

demo演示

  1. 用备注来演示后台校验,备注文本框中什么也不输入,直接点解确定按钮
    在这里插入图片描述
    备注输入框中什么也不输入,直接点击确定按钮后,页面显示“备注长度在10-15个字符!备注不能为空!”
    在这里插入图片描述

后台代码

javax.validation.constraints jdk提供的校验包,导包的时候导这个

@PostMapping("/save")
@ApiOperation("保存课程")
public ResultUtil save(@RequestBody @Valid DemoCourseBo demoCourse,
                       BindingResult result){
    if (result.hasErrors()) {
        return ValidUtil.getDefaultMsg(result);
    }
    return demoCourseService.save(demoCourse);
}

import com.sgcc.demo.model.po.Student;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

@Data
public class DemoCourseBo{

    /**学生列表*/
    @NotEmpty(message = "集合不能为空!")
    private List<@Valid Student> studentList;

    /**目录列表*/
    @NotEmpty
    private List<String> categoryList;

    /**
     * 主键:
     */
    private String id;

    /**
     * 课程名
     */
    @NotBlank(message = "课程名不能为空!")
    @Length(min = 2, max = 5, message = "课程名长度在2-5个字符!")
    private String courseName;

    /**
     * 备注
     */
    @NotBlank(message = "备注不能为空!")
    @Length(min = 10, max = 15, message = "备注长度在10-15个字符!")
    private String memo;


}

由于PO类是自动生成的,为防止覆盖,不能进行修改,所以写了Bo类。

BindingResult result 这个对象就是捕捉校验信息的,如果校验生效了,说明请求的参数是不符合校验的,也就是result.hasError()为true,进入if。否则,校验不生效,说明请求的参数符合校验,跳过if,继续走后面。

ValidUtil工具类会将我们预先设定的校验信息拼接起来返回前端。

常用后台校验注解

@NotNull  被注释的元素不能为null
@Pattern(value) 被注释的元素必须符合指定的正则表达式。
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 用在List和数组上 包含了@NotNull
@NotBlank 用在字符串上   包含了@NotNull

可能用到的

@Null  被注释的元素必须为null
@NotNull  被注释的元素不能为null
@AssertTrue  被注释的元素必须为true
@AssertFalse  被注释的元素必须为false
@Min(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max,min)  被注释的元素的大小必须在指定的范围内。
@Digits(integer,fraction)  被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past  被注释的元素必须是一个过去的日期
@Future  被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式。
@Email 被注释的元素必须是电子邮件地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty
@Range  被注释的元素必须在合适的范围内
@NotBlank
发布了31 篇原创文章 · 获赞 32 · 访问量 8109

猜你喜欢

转载自blog.csdn.net/qq_40905403/article/details/99052545