SpringBoot 之表单验证@Valid

xiaoxiao2021-02-28  30

SpringBoot提供了强大的表单验证功能实现,给我们省去了写验证的麻烦;

这里我们给下实例,提交一个有姓名和年龄的表单添加功能,

要求姓名不能为空,年龄必须是不小于18 ;

我们先新建一个Student实体

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 package  com.java1234.entity;   import  javax.persistence.Column; import  javax.persistence.Entity; import  javax.persistence.GeneratedValue; import  javax.persistence.Id; import  javax.persistence.Table; import  javax.validation.constraints.Min; import  javax.validation.constraints.NotNull;   @Entity @Table (name= "t_student" ) public  class  Student {        @Id      @GeneratedValue      private  Integer id;            @NotEmpty (message= "姓名不能为空!" )      @Column (length= 50 )      private  String name;            @NotNull (message= "年龄不能为空!" )      @Min (value= 18 ,message= "年龄必须大于18岁!" )      @Column (length= 50 )      private  Integer age;        public  Integer getId() {          return  id;      }        public  void  setId(Integer id) {          this .id = id;      }        public  String getName() {          return  name;      }        public  void  setName(String name) {          this .name = name;      }        public  Integer getAge() {          return  age;      }        public  void  setAge(Integer age) {          this .age = age;      }       }

这里只用了两个注解,下面列下清单,平时可以参考用;

限制说明@Null限制只能为null@NotNull限制必须不为null@AssertFalse限制必须为false@AssertTrue限制必须为true@DecimalMax(value)限制必须为一个不大于指定值的数字@DecimalMin(value)限制必须为一个不小于指定值的数字@Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction@Future限制必须是一个将来的日期@Max(value)限制必须为一个不大于指定值的数字@Min(value)限制必须为一个不小于指定值的数字@Past限制必须是一个过去的日期@Pattern(value)限制必须符合指定的正则表达式@Size(max,min)限制字符长度必须在min到max之间@Past验证注解的元素值(日期类型)比当前时间早@NotEmpty验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)@NotBlank验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格@Email验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

dao接口写下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 package  com.java1234.dao;   import  org.springframework.data.jpa.repository.JpaRepository;   import  com.java1234.entity.Student;   /**   * 学生Dao接口   * @author user   *   */ public  interface  StudentDao  extends  JpaRepository<Student, Integer>{   }

service接口写下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package  com.java1234.service;   import  com.java1234.entity.Student;   /**   * 学生Service接口   * @author user   *   */ public  interface  StudentService {        /**       * 添加学生       */      public  void  add(Student student); }

service接口实现类写下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package  com.java1234.service.impl;   import  javax.annotation.Resource;   import  org.springframework.stereotype.Service;   import  com.java1234.dao.StudentDao; import  com.java1234.entity.Student; import  com.java1234.service.StudentService;   /**   * 学生Service实现类   * @author user   *   */ @Service public  class  StudentServiceImpl  implements  StudentService{        @Resource      private  StudentDao studentDao;        @Override      public  void  add(Student student) {          studentDao.save(student);      } }

controller写下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package  com.java1234.controller;   import  javax.annotation.Resource; import  javax.validation.Valid;   import  org.springframework.stereotype.Controller; import  org.springframework.validation.BindingResult; import  org.springframework.web.bind.annotation.PostMapping; import  org.springframework.web.bind.annotation.RequestMapping; import  org.springframework.web.bind.annotation.ResponseBody; import  org.springframework.web.bind.annotation.RestController; import  org.springframework.web.servlet.ModelAndView;   import  com.java1234.entity.Student; import  com.java1234.service.StudentService;   /**   * 学生控制类   * @author user   *   */ @RestController @RequestMapping ( "/student" ) public  class  StudentController {        @Resource      private  StudentService studentService;            /**       * 添加图书       * @param book       * @return       */      @ResponseBody      @PostMapping (value= "/add" )      public  String add( @Valid  Student student,BindingResult bindingResult){          if (bindingResult.hasErrors()){              return  bindingResult.getFieldError().getDefaultMessage();          } else {              studentService.add(student);              return  "添加成功!" ;          }      } }

add方法里 实体前要加@Valid 假如字段验证不通过,信息绑定到后面定义的BindingResult;

student添加页面studentAdd.html

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!DOCTYPE html> < html > < head > < meta  charset = "UTF-8" > < title >学生信息添加页面</ title > < script  src = "jQuery.js" ></ script > < script  type = "text/javascript" >      function submitData(){          $.post("/student/add",{name:$("#name").val(),age:$("#age").val()},                  function(result){                      alert(result);                  }          );      } </ script > </ head > < body > 姓名:< input  type = "text"  id = "name"  name = "name" /> 年龄:< input  type = "text"  id = "age"  name = "age" /> < input  type = "button"  value = "提交"  onclick = "submitData()" /> </ body > </ html >

浏览器请求:http://localhost:8888/studentAdd.html

直接点击提交

输入姓名后,提交

输入年龄5,提交

我们改成20,提交

提交通过。

转载请注明原文地址: https://www.6miu.com/read-2626725.html

最新回复(0)