spring-boot - 在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
解决方案
首先,您应该开始使用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一样进行。
推荐阅读
- c# - 为什么 NumberFormatInfo 在 Azure 环境中的行为不同?
- shell - iptables 规则是否正确?
- amazon-web-services - cloudformation 部署的 UI5 Web 应用,如何创建 SSM 参数以便以后可以访问?
- rust - 在使用 lto=true 构建 Rust 二进制文件时,有没有办法限制链接器检查的 crate?
- python - 在 Python 中一对一比较两个列表
- css - Bootstrap DateTimePicker:数字列之间的空间
- python - 模拟类函数应该被调用一次,但 call_count == 0?
- php - 调用字符串上的成员函数(但函数返回字符串)PHP
- sql - 如果最新记录状态匹配,则更新所有其他记录
- c# - 使用 RabbitMq 的 MassTransit 在发生错误时未重试