Spring MVC GET-запрос с параметром Java 8 Instant request

Я пытаюсь написать контроллер Spring MVC GET, который принимает Java 8 Instant в качестве параметра запроса:

    @GetMapping
    @JsonView(OrderListing.class)
    @Validated
    public WebSeekPaginatedResultsDto<OrderListingDto> findAll(@Valid OrderSearchCommand orderSearchCommand) {
       // Some code
    }

с:

    public class OrderSearchCommand {
        private Instant dateCreatedStart;
        private Instant dateCreatedEnd;
        // Some other fields
    }

Я запускаю запрос GET из некоторого кода React/Javascript с чем-то вроде этого:

    http://localhost:8080/mms/front/orders?dateCreatedStart=2017-05-31T22%3A00%3A00.000Z 

Весне, похоже, это не нравится и выдает ошибку. Вот сообщение об ошибке:

    Failed to convert property value of type 'java.lang.String' to required type 'java.time.Instant' for property 'dateCreatedStart'; 
    nested exception is java.lang.IllegalStateException: 
    Cannot convert value of type 'java.lang.String' to required type 'java.time.Instant' for property 'dateCreatedStart': no matching editors or conversion strategy found

Есть идеи, почему я это понимаю?

Спасибо

3 ответа

Сообщение об ошибке говорит само за себя: нет зарегистрированных String в Instant конвертер.

когда Controller получает запрос, все параметры Strings. Spring/Jackson имеет список предопределенных конвертеров для большинства основных типов: - String > Integer - String > Boolean

Но по умолчанию нет String > Instant конвертер.

Вам необходимо создать и зарегистрировать один. Или вы можете изменить тип ввода на что-то, с чем может справиться Spring @DateTimeFormat аннотация: Как принять параметры Date в GET-запросе к Spring MVC Controller?

Я подозреваю, что @DateTimeFormat не будет работать для Instant поля. В частности,Instant не указан в качестве одного из типов, для которых он работает в справочном документе Spring.

Проверьте Spring Reference Раздел 9.5 для деталей о преобразовании пользовательских типов Spring. Создать Converter<String, Instant> конвертер. Раздел 9.5.5 посвящен регистрации пользовательских преобразователей типов.

Может быть, это может помочь вам? сериализация / десериализация java 8 java.time с помощью JSON JSON Mapper. Я вижу, что этот Jackson включает класс Instant.

Другие вопросы по тегам