Hello everyone. For this article we will be empowering our Spring WebFlux and MongoDB to be able to use ZonedDateTime, so let's get started.
TL;DR
You can find source code in this repository
Create Spring WebFlux Project
And if you want to implement ZonedDateTime inside our Spring WebFlux application, you can add ReadingConverter & WritingConverter for our MongoDB. you can see the code that implementation in the below.
@Configuration public class MongoConfig { @Bean public MongoCustomConversions mongoCustomConversions() { List<Converter<?,?>> converters = new ArrayList<>(); converters.add(ZonedDateTimeToDate.INSTANCE); converters.add(DateToZonedDateTime.INSTANCE); return new MongoCustomConversions(converters); } @ReadingConverter enum DateToZonedDateTime implements Converter<Date, ZonedDateTime> { INSTANCE; @Override public ZonedDateTime convert(Date date) { return date.toInstant() .atZone(ZoneId.systemDefault()) .truncatedTo(ChronoUnit.MILLIS); } } @WritingConverter enum ZonedDateTimeToDate implements Converter<ZonedDateTime, Date> { INSTANCE; @Override public Date convert(ZonedDateTime zonedDateTime) { return Date.from(zonedDateTime.toInstant()); } } }
That's it. You can use ZonedDateTime as a datetime type in our class. 😁
Example of POST request
curl --location --request POST 'http://localhost:8080/promotions' \ --header 'Content-Type: application/json' \ --data-raw '{ "name": "promotion-2", "startDate": "2021-06-01T10:00:00.000+07:00", "endDate": "2021-06-20T18:00:00.000+07:00" }'
Result
This is a short article on how to use the converter of ZonedDateTime in Spring Data MongoDB Reactive, I hope it will be useful for all readers.
Thank you very much. 😄
Top comments (0)