zoukankan      html  css  js  c++  java
  • springboot 通过注解校验类中字段

    1.引入maven依赖

    如果是springboot项目,就可以不必引入,这个存在最核心的web开发包里

    <!-- web -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.5.RELEASE</version>
    </dependency>

    如果不是springboot项目,则需要引入如下依赖包

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>

    2.DTO类添加注解

    import lombok.Data;

    import javax.validation.constraints.NotBlank;
    import javax.validation.constraints.NotEmpty;
    import javax.validation.constraints.NotNull;
    import java.io.Serializable;

    /**
    * 用户信息DTO
    * @author htdd
    */
    @Data
    public class UserInfoDTO implements Serializable {

    private static final long serialVersionUID = -1776650315673803884L;

    /**
    * 昵称
    */
    @NotNull(message = "姓名不能为空")
    private String name;

    /**
    * 密码
    */
    @NotEmpty(message = "密码不能为空")
    private String pwd;

    /**
    * 手机号
    */
    @NotBlank(message = "手机号不能为空")
    private String phone;
    }

    3.三种非空校验的区别

    @NotNull 是校验 json字符串中变量为null的 例:{"name":null} ← 校验有效; 对json字符串中传递参数为 "" 这种校验无效 例 :{"name":""} ← 校验无效;对json字符串中校验 " " 无效 例:{"name":" "} ← 校验无效;

    @NotEmpty 可以校验null 和 "" 的情况,但是对 " "  ←(中间有个空格)就无效 例:{"name":null} ← 校验有效;例 :{"name":""} ← 校验有效;例:{"name":" "} ← 校验无效;

    @NotBlank 可以校验以上三种情况  例:{"name":null} ← 校验有效;例 :{"name":""} ← 校验有效;例:{"name":" "} ← 校验有效;

    4.controller控制器中校验

    @PostMapping("test")
    public JsonData test(@RequestBody @Valid UserInfoDTO userInfo, BindingResult result) throws Exception{
    if (result.hasErrors()) {
        // 获取报错信息中的第一条数据
    String message = result.getAllErrors().get(0).getDefaultMessage();
    return JsonData.buildError(message);
    }
    return JsonData.buildSuccess("success");
    }

    这样我们就只需要在DTOl字段上加上非空验证和相应提示语就好了。注意 需要校验的类前需要加入@Valid 注解 不然注解不生效。

    5.常用的校验注解

    ​javax.validation.constraints.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  被注释的元素必须在合适的范围内

    6.注解补充

    @Valid 注解类型的使用:
    
    @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格式

    7.扒图小能手(来自别人的博客)

    常用校验注解图片:

    8.2022-01-05 补充

    /**
    * 手机号格式校验
    */
    @Pattern(regexp = "1[3|4|5|7|8][0-9]\\d{8}",message = "手机号格式不正确")
    private String phone;
     
  • 相关阅读:
    Winform界面开发:如何在代码中获取自定义外观元素属性的值
    VCL组件DevExpress VCL发布v20.1.4,附高速下载
    WPF界面开发技巧分享——如何实现自定义DateEdit并自动更正值
    Web开发实用技能,看Kendo UI for jQuery组模板如何使用
    docker从C盘迁移到D盘
    ubuntu16.04中开启和关闭防火墙命令
    Linux安装与卸载 docker-compose
    在Docker容器bash中输入中文
    in()和exists()
    mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题
  • 原文地址:https://www.cnblogs.com/sunxun001/p/15602839.html
Copyright © 2011-2022 走看看