springboot数据格式验证——自定义日期格式验证及list验证

news/2025/2/13 6:28:04/

我们在工作中经常需要对日期格式进行定义,如果客户端传来的日期字符串不符合要求,那么根本无法保存,但是已有的注解并没有日期格式的验证,那我们就自己实现一个

一、自定义日期格式验证的注解@DateFormat

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** @Author: LiuXingJie* @Description:* @Date Create in 9:32 2023/12/1* @Modified By:*/
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DateFormatValidator.class)
public @interface DateFormat {String message() default "日期格式错误";String format() default "yyyy-MM-dd";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

二、验证逻辑处理类

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;/*** @Author: best_liu* @Description:* @Date Create in 9:32 2023/12/1* @Modified By:*/
public class DateFormatValidator implements ConstraintValidator<DateFormat, String> {private DateFormat dateFormat;@Overridepublic void initialize(DateFormat dateFormat) {this.dateFormat = dateFormat;}@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {String format = dateFormat.format();if (format.equals("yyyy-MM")) {DateTimeFormatter dtf1 = new DateTimeFormatterBuilder().appendPattern(format).parseDefaulting(ChronoField.DAY_OF_MONTH, 1).toFormatter();try {LocalDate.parse(s, dtf1);} catch (Exception e) {return false;}} else {SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);try {simpleDateFormat.parse(s);} catch (Exception e) {return false;}}return true;}
}

这个月数据yyyy-MM需要特殊处理的原因在于,如果提供的是yyyy-MM-dd的格式的字符串,使用SimpleDateFormat("yyyy-MM")去解析也不会失败

三、自定义注解的应用

@ApiModelProperty("化验时间")@NotBlank(message = "assayTime是必填项")@DateFormat(format = "yyyy-MM-dd HH:mm:ss",message = "日期格式错误,正确格式为yyyy-MM-dd HH:mm:ss")private String assayTime;

四、controller层的使用 

然后在controller方法中用@RequestBody表示这个参数接收的类

@PostMapping("/save")@RequiredLog(methodType="1")public AjaxResult save(@RequestBody @Validated ProcessQualityAlarm processQualityAlarm) {return processQualityAlarmService.saveInfo(processQualityAlarm);}

五、最终效果

六、SpringBoot关于List集合的校验

 1、针对List集合的校验有两种方案

1)在controller上添加@Validated

2)则集合校验变成如下方式

 3)QualityAlarmVo如下

@Data
public class QualityAlarmVo {@NotBlank(message = "assayTime是必填项")@DateFormat(format = "yyyy-MM-dd HH:mm:ss",message = "日期格式错误,正确格式为yyyy-MM-dd HH:mm:ss")private String assayTime;@NotBlank(message = "factoryArea是必填项")private String factoryArea;@NotBlank(message = "qualityPositionName是必填项")private String qualityPositionName;@NotEmptyprivate List<@NotNull @Valid ProcessQualityAlarm> list;
}

4)效果


http://www.ppmy.cn/news/1254616.html

相关文章

Linux命令(140)之iostat

linux命令之iostat 1.iostat介绍 linux命令iostat(即&#xff1a;I/O statistics)是用来对系统的磁盘操作进行监视 2.iostat用法 iostat [参数] iostat参数 参数说明-c显示CPU的使用情况-d显示磁盘的使用情况-k以KB为单位显示m以MB为单位显示-x显示详细信息-t显示终端和CPU…

T-SQL语句管理表

SQL Server对数据库的操作有两种方式&#xff0c;即可视化操作界面和SQL语言。 SQL Server的操作也可以使用T-SOL语句完成&#xff0c;这也是实际生产环境中数据库管理员最常使用的管理数据库的方法。 T-SQL&#xff1a;SQL的加强版&#xff0c;提供了类似于程序语言的基本功…

自定义类型:结构体(自引用、内存对齐、位段(位域))

目录 一. 结构体类型的声明和定义 1.1结构体相关概念 1.11结构的声明 1.12成员列表 1.2定义结构体类型变量的方法 1.21先声明结构体类型再定义变量名 ​​​​1.22在声明类型的同时定义变量 1.23直接定义结构类型变量 二、结构体变量的创建、初始化​和访问 2.1结构体…

MuleSoft 中的细粒度与粗粒度 API

API 设计是一个令人着迷的话题。API 设计的一个重要方面是根据 API 的特性和功能确定正确的“大小”。所有建筑师都必须在某个时候解决过这个问题。在本文中&#xff0c;我将尝试对我们在获得“正确的”粒度 API 之前需要考虑的各种参数进行一些深入的探讨&#xff1a; 可维护…

cyclictest 交叉编译与使用

目录 使用版本问题编译 numactl编译 cyclictest使用参考 cyclictest 主要是用于测试系统延时&#xff0c;进而判断系统的实时性 使用版本 rt-tests-2.6.tar.gz numactl v2.0.16 问题 编译时&#xff0c;需要先编译 numactl &#xff0c;不然会有以下报错&#xff1a; arm-…

Kubernetes 使用插件扩展 kubectl

例子演示 编写 kubectl-foo &#xff0c;拷贝至 /usr/local/bin/ #!/bin/bash# 可选的参数处理 if [[ "$1" "version" ]] thenecho "1.0.0"exit 0 fi# 可选的参数处理 if [[ "$1" "config" ]] thenecho $KUBECONFIGexit…

node.js express路由和中间件

目录 路由 解释 使用方式 中间件 解释 使用方式 中间件类型 路由注册和中间件注册 代码 app全局路由接口请求以及代码解析 示例1 示例2 示例3 示例4 中间件req继承 嵌套子路由 解释 代码 示例1 路由 解释 在 Express 中&#xff0c;路由&#xff08;Route&…

Matlab 加权均值质心计算(WMN)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路很简单,即将之前的均值中心,引入相关的权重函数(通常与距离有关),以此为每个点进行赋权,最后即可得到一个加权均值中心: 二、实现代码 %% ********<