Джексону требуется дополнительный модуль для Java 8 Time
API.
Модуль
jackson-datatype-jsr310
был устарел и теперь является частьюиз
jackson-modules-java8
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.8</version>
</dependency>
Это означает, что вам необходимо зарегистрировать этот модуль вручную
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
Класс Akka Jackson
предлагает перегруженную версию unmarshaller
, который можно использовать для передачи настроенной версии ObjectMapper
public static <T> Unmarshaller<HttpEntity, T> unmarshaller(ObjectMapper mapper, Class<T> expectedType) {
return Unmarshaller.forMediaType(MediaTypes.APPLICATION_JSON, Unmarshaller.entityToString())
.thenApply(s -> fromJSON(mapper, s, expectedType));
}
Итак, вместо
Jackson.unmarshaller(Video.class)
используйте
Jackson.unmarshaller(objectMapper, Video.class);
objectMapper
параметр является пользовательским ObjectMapper
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
Полный фрагмент будет
post(() ->
path("updatedData", () -> {
LOGGER.info("calling POST /updatedData");
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
return entity(Jackson.unmarshaller(objectMapper, Video.class), videoInfo -> {
LOGGER.debug("Payload received : " + videoInfo.toString());
ArrayList<HttpHeader> headers = getCORSHeaders();
return respondWithHeaders(headers, () ->
onSuccess(videoFrameProcessing.updateVideoInfo(videoInfo), this::complete));
});
})),
Очевидно, извлеките ObjectMapper
как «глобальную» переменную.