首页 > 解决方案 > 在springboot中验证日期时间格式“yyyy-MM-dd HH:mm:ss”

问题描述

这是我的 Json 数据

{
     "arrivaldatetime": "2020-08-21 11:50:09"
}

下面是我的模型课

@Column(name = "ARRIVAL_DATETIME")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Temporal(TemporalType.DATE)
private Date arrivaldatetime;

如何验证到达日期时间?它应该只允许正确的日期和时间格式“yyyy-MM-dd HH:mm:ss”

这是使用错误日期的 json 请求的示例屏幕截图。[1]:https ://i.stack.imgur.com/MSRmj.png

标签: spring-bootdatevalidationdatetime

解决方案


首先,您应该开始使用LocalDate而不是 。Date如果您需要在绑定到模型时将日期转换为所需的格式,那么您应该使用自定义 JsonDeserializer ,更多信息:Java 8 LocalDate Jackson 格式

如果您只需要在请求中触发对日期对象的验证,并且期望不需要在控制器上将日期格式化为所需的格式,那么您可以设置一个自定义验证器,例如:

@Documented
@Constraint(validatedBy = CustomDataValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomDataConstraint {
    String message() default "Invalid data";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}


public class CustomDataValidator implements
  ConstraintValidator<CustomDataConstraint, String> {

    @Override
    public void initialize(CustomDataConstraint data) {
    }

    @Override
    public boolean isValid(String field,
      ConstraintValidatorContext cxt) {
        return field!= null; // Your logic here for validation
    }

}

isValid方法实现可以自定义为验证日期格式所需的任何逻辑。然后在您的控制器模型类中放置如下注释:

@CustomDataConstraint 
@Column(name = "ARRIVAL_DATETIME")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Temporal(TemporalType.DATE)
private Date arrivaldatetime;

自定义验证注解会在模型绑定时由springboot自动触发,验证会像JSR303一样进行。


推荐阅读