我希望我的可审核(包括 @CreatedDate
和 @LastModifiedDate
)MongoDB 文档能够使用 ZonedDateTime
字段。
显然,Spring Data 不支持这种类型(请查看 org.springframework.data.auditing.AnnotationAuditingMetadata
)。
框架版本:Spring Boot 2.0.0 和 Spring Data MongoDB 2.0.0
Spring Data 审计错误:
java.lang.IllegalArgumentException: Invalid date type for member <MEMBER NAME>!
Supported types are [org.joda.time.DateTime, org.joda.time.LocalDateTime, java.util.Date, java.lang.Long, long].
Mongo配置:
@Configuration
@EnableMongoAuditing
public class MongoConfiguration {
}
可审计实体:
public abstract class BaseDocument {
@CreatedDate
private ZonedDateTime createdDate;
@LastModifiedDate
private ZonedDateTime lastModifiedDate;
}
我尝试过的事情
我还尝试为ZonedDateTime
创建自定义转换器,但是Spring Data不予考虑。类DateConvertingAuditableBeanWrapper
具有ConversionService
,该服务在构造方法中配置了JodaTimeConverters
、Jsr310Converters
和ThreeTenBackPortConverters
。
自定义转换器:
@Component
public class LocalDateTimeToZonedDateTimeConverter implements Converter<LocalDateTime, ZonedDateTime> {
@Override
public ZonedDateTime convert(LocalDateTime source) {
return source.atZone(ZoneId.systemDefault());
}
}
Spring Data DateConvertingAuditableBeanWrapper:
class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory {
abstract static class DateConvertingAuditableBeanWrapper implements AuditableBeanWrapper {
private final ConversionService conversionService;
}
}
是否有可能审计ZonedDateTime
字段?
我该如何注册转换器?
MappingMongoConverter
中注册的转换器。Java 8日期/时间(JSR-310)类型映射与Spring Data MongoDB - ciri-cuervo