Spring java.time.LocalDateTime绑定问题

时间:2016-01-19 17:32:52

标签: java spring spring-boot jsr310

我有一个域对象,其属性如下,在表单提交时,只有completionDate从表单输入绑定,而dateRaised为null。除验证错误外没有错误。我尝试将dateRaised类型更改为java.time.LocalDate,它工作正常。是否已经支持绑定到java.time.LocalDateTime?

@NotNull
@Column(name = "date_raised", nullable = false)
@DateTimeFormat(iso = ISO.DATE_TIME)
private java.time.LocalDateTime dateRaised;

@Column(name = "completion_date")
@DateTimeFormat(iso = ISO.DATE)
private java.time.LocalDate completionDate;

1 个答案:

答案 0 :(得分:0)

您需要实施AttributeConverter<EntityType, DatabaseType>来转换日期。

Thoughts on Java之后的以下博客Thorben Janssen解释了如何在LocalDate列中存储DATE属性或在{{1}中存储LocalDateTime列。

  

How to persist LocalDate and LocalDateTime with JPA

     

JPA 2.1在 Java 8之前发布,因此不支持新的日期和时间API。如果您想使用新类(以正确的方式),您需要自己定义转换为TIMESTAMPjava.sql.Date。这可以通过实现java.sql.Timestamp接口并使用AttributeConverter<EntityType, DatabaseType>注释类来轻松完成。通过设置@Converter(autoApply=true),转换器将应用于autoApply=true的所有属性,并且不需要对实体进行任何更改。

EntityType
     

属性的转换对开发人员透明@Converter(autoApply = true) public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> { @Override public Date convertToDatabaseColumn(LocalDate locDate) { return (locDate == null ? null : Date.valueOf(locDate)); } @Override public LocalDate convertToEntityAttribute(Date sqlDate) { return (sqlDate == null ? null : sqlDate.toLocalDate()); } } 属性可以用作任何其他实体属性。例如,您可以将它用作查询参数。

LocalDate