【问题标题】:Failed to convert 1985-04-12T23:20 into java.util.Date无法将 1985-04-12T23:20 转换为 java.util.Date
【发布时间】:2019-10-03 07:15:13
【问题描述】:

[Spring + Kotlin]

这些是依赖项:

implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-data-rest")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-web-services")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.4.0")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

这是实体:

@Entity
class MatchEntity(
        @Id @GeneratedValue val id: Long,
        @NotBlank val matchDateTime: Date,
        @NotBlank @ManyToOne @JoinColumn val tournamentInvolved: TournamentEntity
)

每当我尝试运行以下查询时:

interface MatchRepository : JpaRepository<MatchEntity, Long> {
    fun findMatchesByMatchDateTimeIsAfter(matchDateTime: Date)
}

使用像 1985-04-12T23:20 这样的测试字符串,我得到了错误:

QueryMethodParameterConversionException: Failed to convert 1985-04-12T23:20 into java.util.Date!

按照here的建议,我在查询方法的签名中尝试了@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")等模式,但没有解决。

另外,按照here的建议,我尝试添加

  1. compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.4.0") 到依赖项

  2. spring.jackson.serialization.write_dates_as_timestamps=false 到 application.properties。

没用。

更新: 我还尝试了 LocalDateTime 和 Instant 类。仍然得到相同的例外:

QueryMethodParameterConversionException: Failed to convert 1985-04-12T23:20 into java.time.LocalDateTime!

QueryMethodParameterConversionException: Failed to convert 1985-04-12T23:20 into java.time.Instant!

【问题讨论】:

  • 我建议你不要使用Date。该课程设计不良且早已过时。而是使用LocalDateTimeInstant;两个班级都来自java.time, the modern Java date and time API
  • 我刚试过,我收到了这些消息:QueryMethodParameterConversionException: Failed to convert 1985-04-12T23:20 into java.time.LocalDateTime!QueryMethodParameterConversionException: Failed to convert 1985-04-12T23:20 into java.time.Instant!
  • 尝试将秒数添加到您提交的日期。 (ISO-8601 默认包括秒)。
  • 原来问题出在@DateTimeFormat 模式

标签: spring datetime kotlin spring-data-jpa datetime-format


【解决方案1】:

已解决

使用@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm") 有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2015-12-23
    • 2014-02-10
    • 2011-08-29
    • 2019-08-03
    相关资源
    最近更新 更多