Sok*_*lov 11 java java-8 spring-data spring-data-mongodb java-time
我有Java 8日期/时间字段的简单文档
@Document
public class Token {
private Instant createdAt;
...
}
Run Code Online (Sandbox Code Playgroud)
我希望坚持使用Spring Data MongoDB 1.5版.但是类型的字段java.time.Instant无法正确反序列化,因为MappingMongoConverter缺少java.time类的转换器.
在Spring 4中,我发现org.springframework.format.datetime.standard.DateTimeConverters了不同的Converters包括InstantToLongConverter并LongToInstantConverter声明为私有静态类.
如何配置MongoTemplate使用它们将Instant字段映射到long?
Sok*_*lov 14
我不知道这是不是最好的方法,但我添加了Java 8 Date/Time(JSR-310)类型支持Spring Data MongoDB,1.5.0.RELEASE如下所示:
第一步.添加简单的Spring Converter小号
public class InstantToLongConverter implements Converter<Instant, Long> {
@Override
public Long convert(Instant instant) {
return instant.toEpochMilli();
}
}
public class LongToInstantConverter implements Converter<Long, Instant> {
@Override
public Instant convert(Long source) {
return Instant.ofEpochMilli(source);
}
}
public class LocalDateToStringConverter implements Converter<LocalDate, String> {
@Override
public String convert(LocalDate localDate) {
return localDate.toString();
}
}
public class StringToLocalDateConverter implements Converter<String, LocalDate> {
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source);
}
}
Run Code Online (Sandbox Code Playgroud)第二步.在您的实现中注册这些自定义Converters,如下所示:MappingMongoConverterAbstractMongoConfiguration
@Configuration
@EnableMongoRepositories(basePackages = {"my.app.repository"})
public class MongoConfiguration extends AbstractMongoConfiguration {
...
@Override
public CustomConversions customConversions() {
return new CustomConversions(Arrays.asList(
new InstantToLongConverter(), new LongToInstantConverter(),
new LocalDateToStringConverter(), new StringToLocalDateConverter()));
}
}
Run Code Online (Sandbox Code Playgroud)现在,您的文档Instant字段将保留为长LocalDate字符串和字符串.
| 归档时间: |
|
| 查看次数: |
9556 次 |
| 最近记录: |