带有Java 8即时请求参数的Spring MVC GET请求



我正在尝试编写一个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
    }

我正在从一些 React/Javascript 代码中触发一个 GET 请求,如下所示:

    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

知道我为什么得到这个吗?

谢谢

错误消息是不言自明的: 转换器没有注册Instant String

Controller收到请求时,所有参数都String s。 Spring/Jackson具有大多数基本类型的预定义转换器列表: - 字符串>整数 - 布尔>字符串

但是没有默认的字符串>即时转换器。

您需要创建并注册一个。或者,您可以将输入类型更改为 Spring 可以使用@DateTimeFormat注释处理的内容: 如何接受 GET 请求中的日期参数到 Spring MVC 控制器?

我怀疑@DateTimeFormat不适用于Instant字段。 具体说来 Instant未在 Spring 参考文档中列为其工作类型之一。

查看 Spring 参考第 9.5 节,了解有关 Spring 自定义类型转换的详细信息。 创建Converter<String, Instant>转换器。 第 9.5.5 节介绍自定义类型转换器注册。

也许这可以帮助你? 序列化/反序列化 Java 8 java.time with Jackson JSON 映射器 我看到这个杰克逊包括即时类。

最新更新