Using a custom java.time date with Jackson
It look me quite a bit more research to figure out how to use a custom (or lightly custom) time format with Jackson. I
required a date format to be deserialised that did not have a
colon in the offset. So a date string like
2018-11-05T05:58:00+0000
i.e. +0000
not +00:00
.
In the end it is as simple as:
JavaTimeModule javaTimeModule = new JavaTimeModule();
// Make a new formatter that's based on the ISO_LOCAL_DATE_TIME one
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.optionalStart()
// And just add what we need
.appendOffset("+HHMM", "+0000")
.optionalEnd()
.toFormatter();
LocalDateTimeDeserializer deserializer = new LocalDateTimeDeserializer(formatter);
javaTimeModule.addDeserializer(LocalDateTime.class, deserializer);
// Mapper can come from anywhere, manually created or as part of a framwork
ObjectMapper mapper = ObjectMapper MAPPER = new ObjectMapper();
// Finally use the new time module
mapper.registerModule(javaTimeModule);
// Use mapper to read JSON with our lightly tweaked time format