Spring Boot入门(5)-表单验证

一、常用的表单验证注解

限制 说明
@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格式
  下面通过一个例子来介绍如何使用,就拿 @Min 这个来试。  

二、代码示例

我们的需求是,向数据库中插入一条用户记录(name,age,gender),但是age不得小于18,所以可以用到 @Min 这个注解 1、User.java
  1. package com.liuyanzhao.blog.domain;
  2. import javax.persistence.Entity;
  3. import javax.persistence.GeneratedValue;
  4. import javax.persistence.Id;
  5. import javax.validation.constraints.Min;
  6. @Entity
  7. public class User {
  8.     @Id
  9.     @GeneratedValue
  10.     private Integer id;
  11.     private String name;
  12.     private String gender;
  13.     @Min(value = 18,message = "未成年!!!")
  14.     private Integer age;
  15.     public Integer getId() {
  16.         return id;
  17.     }
  18.     public void setId(Integer id) {
  19.         this.id = id;
  20.     }
  21.     public String getName() {
  22.         return name;
  23.     }
  24.     public void setName(String name) {
  25.         this.name = name;
  26.     }
  27.     public String getGender() {
  28.         return gender;
  29.     }
  30.     public void setGender(String gender) {
  31.         this.gender = gender;
  32.     }
  33.     public Integer getAge() {
  34.         return age;
  35.     }
  36.     public void setAge(Integer age) {
  37.         this.age = age;
  38.     }
  39. }
注意第20行的注解   2、UserController.java
  1. package com.liuyanzhao.blog.controller;
  2. import com.liuyanzhao.blog.domain.User;
  3. import com.liuyanzhao.blog.repository.UserRepository;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.validation.BindingResult;
  6. import org.springframework.web.bind.annotation.*;
  7. import javax.validation.Valid;
  8. /**
  9.  * @Author 言曌
  10.  * @DATE 2017/10/29 上午10:33
  11.  * @URL http://liuyanzhao.com
  12.  */
  13. @RestController
  14. public class UserController {
  15.     @Autowired
  16.     private UserRepository userRepository;
  17.     /**
  18.      * 添加一个用户,年龄不得小于18
  19.      * @return
  20.      */
  21.     @PostMapping(value = "/users")
  22.     public User insertUser(@Valid User user, BindingResult bindingResult) {
  23.         if(bindingResult.hasErrors()) {
  24.             System.out.println(bindingResult.getFieldError().getDefaultMessage());
  25.             return null;
  26.         }
  27.         user.setName(user.getName());
  28.         user.setGender(user.getGender());
  29.         user.setAge(user.getAge());
  30.        return  userRepository.save(user);
  31.     }
  32. }
注意第29行的注解@Valid和注入的bindingResult对象   3、UserRepository.java
  1. package com.liuyanzhao.blog.repository;
  2. import com.liuyanzhao.blog.domain.User;
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. /**
  5.  * @Author 言曌
  6.  * @DATE 2017/10/29 上午10:35
  7.  * @URL http://liuyanzhao.com
  8.  */
  9. public interface UserRepository  extends JpaRepository<User,Integer>{//表名和Id类型
  10. }
  然后我们可以使用Postman或者restlet client根据发起POST请求,添加数据。 如果 age的值小于18,记录将无法添加,控制台会出现 “未成年!!!”。 其他注解使用类似。

发表评论

目前评论:1