I have simple document with Java 8 date/time fields
@Document
public class Token {
private Instant createdAt;
...
}
that I want to
I don't know if this is the best way but I added Java 8 Date/Time (JSR-310) types support to Spring Data MongoDB 1.5.0.RELEASE like this:
First step. Add simple Spring Converters
public class InstantToLongConverter implements Converter {
@Override
public Long convert(Instant instant) {
return instant.toEpochMilli();
}
}
public class LongToInstantConverter implements Converter {
@Override
public Instant convert(Long source) {
return Instant.ofEpochMilli(source);
}
}
public class LocalDateToStringConverter implements Converter {
@Override
public String convert(LocalDate localDate) {
return localDate.toString();
}
}
public class StringToLocalDateConverter implements Converter {
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source);
}
}
Second step. Register these custom Converters with MappingMongoConverter in your AbstractMongoConfiguration implementation like this:
@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()));
}
}
Now your document's Instant fields will be persisted as long values and LocalDates as Strings.