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;
 
原文地址:https://www.cnblogs.com/sunxun001/p/15602839.html