У меня есть контроллер, который принимает POJO (MySearch
), представляющий необязательные параметры запроса. Запросы выполняются успешно, если включены параметры id
и / или name
.
Однако, если я включу параметр dateTime
, например, так:
GET /find?dateTime=2019-03-15T22:17:42Z&id=1432&name=Bob
Я получаю ошибку:
Failed to convert from type [java.lang.String] to type [java.time.ZonedDateTime]
for value '2019-03-15T22:17:42Z'; nested exception is java.lang.IllegalArgumentException:
Parse attempt failed for value [2019-03-15T22:17:42Z]
Я также пытался пометить поле dateTime
с помощью @DateTimeFormat(iso = ISO.DATE_TIME)
, но это не помогло.
Сериализация полей ZonedDateTime
в других тестах успешно форматирует дату / время, аналогичные yyyy-MM-ddTHH:mm:ssZ
в выходных данных.
Я испытываю трудности только с десериализацией поля ZonedDateTime
в POJO.
Контроллер
@RestController
public class MyController {
@GetMapping("/find")
public MyResponse find(MySearch search) {
// Do stuff ...
}
}
POJO
public class MySearch {
private Integer id;
private String name;
private ZonedDateTime dateTime;
}
Конфигурация
Я настроил ObjectMapper
, используя следующие два компонента:
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
return Jackson2ObjectMapperBuilder.json()
.modulesToInstall(new Jdk8Module(), new JavaTimeModule())
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
}
@Bean
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
return builder.build();
}
Что я пропускаю или делаю неправильно?
Спасибо!