怎样做才能让网站更受关注,10000个免费货源网站,夜间app排行榜,上海网站建设怎么弄我们在工作中经常需要对日期格式进行定义#xff0c;如果客户端传来的日期字符串不符合要求#xff0c;那么根本无法保存#xff0c;但是已有的注解并没有日期格式的验证#xff0c;那我们就自己实现一个
一、自定义日期格式验证的注解DateFormat
import javax.validatio…我们在工作中经常需要对日期格式进行定义如果客户端传来的日期字符串不符合要求那么根本无法保存但是已有的注解并没有日期格式的验证那我们就自己实现一个
一、自定义日期格式验证的注解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 ConstraintValidatorDateFormat, 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(methodType1)public AjaxResult save(RequestBody Validated ProcessQualityAlarm processQualityAlarm) {return processQualityAlarmService.saveInfo(processQualityAlarm);}
五、最终效果 六、SpringBoot关于List集合的校验 1、针对List集合的校验有两种方案
1在controller上添加Validated 2则集合校验变成如下方式 3QualityAlarmVo如下
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 ListNotNull Valid ProcessQualityAlarm list;
}
4效果