• 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

  • 相关阅读:
    Pyhton学习-Python与中间件之Celery(7)
    Pyhton学习-Python与中间件之RabbitMQ(6)
    Pyhton学习-Python与中间件之Redis(5)
    Pyhton学习-Python操作数据库之Redis(3)
    解决pycharm问题:module 'pip' has no attribute 'main'
    C#调用Python脚本打印pdf文件
    C# 三种打印方式含代码
    python-memcached学习笔记
    django框架使用mysql步骤
    pycharm配置运行django项目步骤
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8435427.html
Copyright © 2020-2023  润新知