springboot-web进阶(一)——表单验证

一、概述

  1.准备

  先把快速入门篇的结构调整一下,按照自己的喜好或者要求调整:

  

  2.需求

    基于快速入门篇增加一个女生的需求,禁止添加未成年(18岁以下)

  3.实现

    第一步:在bean的属性上加对应约束注解

  @Size(min = 3, max = 8, message = "名称长度不合法!")
    private String name;
    @Min(value = 18, message = "未成年禁止入内!")
    private Integer age;
package com.example.demo.bean;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.Min;
import javax.validation.constraints.Size;

/**
 * girl的bean
 *
 * @author zcc ON 2018/2/9
 **/
@Entity
public class Girl {
    @Id
    @GeneratedValue
    private Integer id;
    @Size(min = 3, max = 8, message = "名称长度不合法!")
    private String name;
    @Min(value = 18, message = "未成年禁止入内!")
    private Integer age;

    public Girl() {
    }

    public Girl(String name, Integer age) {
        this.name = name;
        this.age = 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;
    }
}
Girl

    第二步:在需要校验的参数前加@Valid注解

@PostMapping(value = "/girls")
    public Girl addGirl(@Valid Girl girl) {
        // 直接返回这个实体类也可以
        return girlRepository.save(girl);
    }

    第三步:根据错误信息错误参数校验逻辑

 @PostMapping(value = "/girls")
    public Girl addGirl(@Valid Girl girl, BindingResult bindingResult) {
        // 表单验证逻辑
        if (bindingResult.hasErrors()) {
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            for (FieldError fieldError : fieldErrors) {
                log.error("错误字段为:{},错误信息为:{}", fieldError.getField(), fieldError.getDefaultMessage());
            }
            // 发生错误,直接return
            return null;
        }
        // 直接返回这个实体类也可以
        return girlRepository.save(girl);
    }

    测试:

    

  常用约束:

@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格式

    完整约束,请参考hibernate官方文档Bean Validation constraints

      https://docs.jboss.org/hibernate/validator/5.4/reference/en-US/html_single/#section-builtin-constraints

原文地址:https://www.cnblogs.com/jiangbei/p/8435427.html