我们在工作中经常需要对日期格式进行定义,如果客户端传来的日期字符串不符合要求,那么根本无法保存,但是已有的注解并没有日期格式的验证,那我们就自己实现一个
一、自定义日期格式验证的注解@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;
@Override
public void initialize(DateFormat dateFormat) {
this.dateFormat = dateFormat;
}
@Override
public 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集合的校验有两种方案
@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;
@NotEmpty
private List<@NotNull @Valid ProcessQualityAlarm> list;
}
4)效果
原文地址:https://blog.csdn.net/askuld/article/details/134727109
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_27604.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。