You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring项目中LocalDateTime类型转换错误的解决方法咨询

解决Spring表单提交LocalDateTime类型转换错误

嘿,我来帮你搞定这个前端传的2020-06-20T17:35无法转成java.time.LocalDateTime的问题!这个坑我当初学Spring的时候也踩过,其实就是Spring默认的日期转换器不识别这种带T的短时间格式,咱们只需要给实体类的字段加个注解就能解决。

问题根源

你的前端用了type="datetime-local"的输入框,它提交的格式是yyyy-MM-dd'T'HH:mm(比如2020-06-20T17:35),但Spring默认的LocalDateTime转换器没法自动识别这种不带秒的格式,所以抛出了转换失败的异常。

解决方案:给实体类字段添加@DateTimeFormat注解

只需要在Flight实体类的estimatedDepartureTime字段上加上@DateTimeFormat注解,明确指定匹配的格式就行,有两种方式可选:

方式1:使用ISO标准格式推荐

直接用ISO的DATE_TIME类型,它能兼容这种带T的格式:

@Column(name="estimatedDepartureTime",columnDefinition="TIMESTAMP")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) // 新增这个注解
private LocalDateTime estimatedDepartureTime;

方式2:指定精确的格式字符串

如果你想更精准控制格式,可以直接写匹配的pattern:

@Column(name="estimatedDepartureTime",columnDefinition="TIMESTAMP")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm") // 完全匹配前端传的格式
private LocalDateTime estimatedDepartureTime;

记得要导入org.springframework.format.annotation.DateTimeFormat包哦(你已经导入了,所以直接加就行)。

为什么这能解决问题?

@DateTimeFormat注解会告诉Spring MVC的参数绑定器,按照你指定的格式去解析前端传来的字符串,把它转换成对应的LocalDateTime对象,这样就不会出现类型不匹配的错误了。

额外提示:全局配置可选

如果你不想每个LocalDateTime字段都加注解,也可以在Spring MVC的配置类里全局设置日期格式:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");
        registry.addFormatterForFieldType(LocalDateTime.class, new DateTimeFormatterFormatter(localDateTimeFormatter));
    }
}

不过对于新手来说,先给单个字段加注解是最直接有效的方式。

现在修改完代码,重启项目再提交表单试试,应该就能正常转换了!

内容的提问来源于stack exchange,提问作者kadrtw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:32:56