【Spring Boot 快速入门】十四、Spring Boot集成@Valid注解的接口参数合法性校验

简介: 【Spring Boot 快速入门】十四、Spring Boot集成@Valid注解的接口参数合法性校验

前言


  嗨,大家好,相信大家在开发过程中经常编写后台接口,在前端调用后台接口的时候,需要对前端输入的参数进行合法性和有效性进行校验。有多种方式针对数据进行校验。本次给大家介绍一下基于@Valid注解的参数合法性校验。希望可以帮助到大家。下面开始上正题。


初始


  @Valid注解校验是基于标准JSR-303规范开发的。@Valid注解可以用在类的方法、构造函数、方法参数和成员属性(字段)上面。当请求参数输入后,会对参数的合法性进行校验,如果参数异常,则直接会返回异常的message提示信息。   当然,在项目中使用@Valid注解,需要引入相关的依赖。本次根据Spring Boot的版本,引入如下pom依赖文件。大家可以根据自己使用的Spring Boot 版本引入相应的依赖文件即可。 Spring Boot版本如下:


<version>2.3.0.RELEASE</version>
<dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.22</version>
        </dependency>


快速开始


  相信大家已经引入了响应的依赖,下面开始针对的注解进行介绍。


定义接口


   如下是一个普通的接口,其中请求方式是:POST。在请求参数中,使用@Valid对参数体OrderDto进行了注释。当OrderDto作为参数进行访问时,会自动根据OrderDto中属性的注解进行校验。如果不满足条件,直接返回message异常信息。

@PostMapping("/V1/save")
    public String addInfo(HttpServletRequest request, @Valid @RequestBody OrderDto orderDto) {
        log.info("信息新增接口,请求参数是:{}", JSON.toJSONString(orderDto));
        try {
            return JSON.toJSONString(orderDto);
        } catch (Exception e) {
            log.error("信息新增接口,请求参数是:{},异常原因是:", JSON.toJSONString(orderDto), e);
            return "推送接口失败。失败原因为:" + e.getMessage();
        }
    }


@Null


介绍:带@Null注释的元素必须是null。

参数类型:接受任何类型参数。

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@Null(message = "id必须为空")
    private String id;


@NotNull


介绍:带@NotNull注释的元素必须不为null。

参数类型:接受任何类型参数。

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


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


@AssertFalse


介绍:带AssertFalse注释的元素必须为false

参数类型:支持的类型为:boolean 和 Boolean

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@AssertFalse
    private boolean bf;


@AssertTrue


介绍:带@AssertTrue注释的元素必须为true。

参数类型:支持的类型为:boolean 和 Boolean

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@AssertTrue
    private boolean bt;


@AssertTrue


介绍:带@AssertTrue注释的元素必须为true。

参数类型:支持的类型为:boolean 和 Boolean

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@AssertTrue
    private boolean bt;


@AssertTrue


介绍:带@AssertTrue注释的元素必须为true。

参数类型:支持的类型为:boolean 和 Boolean

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@AssertTrue
    private boolean bt;


@DecimalMax


介绍:带@DecimalMax注释的元素的值必须小于或等于的数字等于指定的最大值。。

参数类型:BigDecimal  BigInteger CharSequence及基础类型:byte short int long 和这些基础类型的包装类型

不支持参数类型:由于四舍五入错误,不支持double和float

使用地方:方法、属性、注释类型、构造函数、参数

null值被认为是有效的。

value : 元素的值必须小于或等于

inclusive:指定的最大值是否包含。默认情况下,它是包含的。

message:自定义返回的异常信息。


示例:

@DecimalMax(value = "100.00")
    private BigDecimal bdMax;


@DecimalMin


介绍:带@DecimalMin注释的元素的值必须大于或等于的数字等于指定的最小值。。

参数类型:BigDecimal  BigInteger CharSequence及基础类型:byte short int long 和这些基础类型的包装类型

不支持参数类型:由于四舍五入错误,不支持double和float

使用地方:方法、属性、注释类型、构造函数、参数

null值被认为是有效的。

value : 元素的值必须大于或等于

inclusive:指定的最小值是否包含。默认情况下,它是包含的。

message:自定义返回的异常信息。


示例:


@DecimalMin(value = "60.00")
    private BigDecimal dmMin;


@Digits


介绍:@Digits限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction,带注释的元素必须是可接受范围内的数字。

参数类型:BigDecimal  BigInteger CharSequence及基础类型:byte short int long 和这些基础类型的包装类型

null值被认为是有效的。

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:

@Digits(integer = 100,fraction = 100)
    private double aDouble;


@Future


介绍:带@Future注释的元素必须是将来的一瞬间、日期或时间。

参数类型:Date; Calendar ;Instant; LocalDate; LocalDateTime; LocalTime ;MonthDay ;OffsetDateTime ;OffsetTime ;Year ;YearMonth; ZonedDateTime;  HijrahDate ;JapaneseDate; MinguoDate; ThaiBuddhistDate;

使用地方:方法、属性、注释类型、构造函数、参数

null值被认为是有效的。

message:自定义返回的异常信息。


示例:


@Future
    private Date futureDate;


@Max


介绍:带@Max注释的元素值必须小于或者等于指定的最大值。

参数类型:BigDecimal BigInteger byte short  int long 和这些基础类型的包装类型

不支持参数类型:不支持double和float

null值被认为是有效的。

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@Max(value = 1000)
    private Long maxInfo;


@Min


介绍:带@Min注释的元素值必须大于或者等于指定的最小值。

参数类型:BigDecimal BigInteger byte short  int long 和这些基础类型的包装类型

不支持参数类型:不支持double和float

null值被认为是有效的。

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@Min(value = 1)
    private Long minInfo;


@Past


介绍:带@Past注释的元素必须是过去的瞬间、日期或时间。现在默认定义为虚拟机的当前时间。

参数类型:Date; Calendar ;Instant; LocalDate; LocalDateTime; LocalTime ;MonthDay ;OffsetDateTime ;OffsetTime ;Year ;YearMonth; ZonedDateTime;  HijrahDate ;JapaneseDate; MinguoDate; ThaiBuddhistDate;

使用地方:方法、属性、注释类型、构造函数、参数

null值被认为是有效的。

message:自定义返回的异常信息。


示例:


@Past
    private Date pastDate;


@Pattern


介绍:带@Pattern注释的必须与指定的正则表达式匹配。

参数类型:正则表达式遵循Java正则表达式约定

使用地方:方法、属性、注释类型、构造函数、参数

regexp:正则表达式

flags:正则表达式是否启用的枚举数组

message:自定义返回的异常信息。


示例:


@Pattern(regexp = "^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$",
            flags = Pattern.Flag.CASE_INSENSITIVE)
    private String patternInfo;


@Size


介绍:带@Size注释的元素大小必须介于指定的边界(包括)之间。

参数类型:CharSequence  计算字符序列的长度; Collection 计算集合大小; Map 映射大小已计算; Array 计算数组长度;

null 元素被认为是有效的; min 最小值,默认为0; max 最大值,默认为 0x7fffffff;

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@Size(min = 0,max = 100)
    private int sizeInfo;


@NotEmpty


介绍:带@NotEmpty注释的元素不能为 null或为空

参数类型:CharSequence  计算字符序列的长度; Collection 计算集合大小; Map 映射大小已计算; Array 计算数组长度;

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@NotEmpty
    private String phone;


@NotBlank


介绍:验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格。带注释的元素不能是null,并且必须至少包含一个非空白字符。

参数类型:Object

使用地方:方法、属性、注释类型、构造函数、参数

message:自定义返回的异常信息。


示例:


@NotBlank
    private String nickName;


@Email


介绍:字符串必须是格式正确的电子邮件地址。构成有效数据的确切语义

参数类型:基础类型 CharSequence

使用地方:方法、属性、注释类型、构造函数、参数

null 元素被认为是有效的。

regexp:正则表达式

flags:结合使用以指定正则表达式

message:自定义返回的异常信息。


示例:


@Email
    private String email;


结语


  以上就是Spring Boot集成@Valid注解的详细介绍,大家也可以查询接口文档去了解一下。



目录
相关文章
|
10天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
28 0
|
17天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
41 4
SpringBoot必须掌握的常用注解!
|
13天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
10 0
|
Java 应用服务中间件
SpringBoot集成使用jsp(超详细)
SpringBoot集成使用jsp(超详细)
SpringBoot集成使用jsp(超详细)
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
148 1
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
153 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
20天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
95 62
|
18天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
36 2
|
21天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
219 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统