ZonedDateTime не анализируется правильно, если отправлено как параметр запроса URL - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть контроллер, который принимает 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();
}

Что я пропускаю или делаю неправильно?

Спасибо!

...