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

问题描述 投票:0回答:4

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

Spring 似乎不喜欢它并抛出错误。这是错误消息:

    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

知道我为什么会收到这个吗?

谢谢你

java spring spring-mvc java-8 java.time.instant
4个回答
3
投票

错误消息是不言自明的: 没有注册

String
Instant
转换器。

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

但是没有默认的 String > Instant 转换器。

您需要创建并注册一个。或者你可以使用

@DateTimeFormat
注释将输入类型更改为 Spring 可以处理的类型: 如何在 Spring MVC 控制器的 GET 请求中接受日期参数?


0
投票

我怀疑 @DateTimeFormat 不适用于

Instant
字段。 具体来说,
Instant
未在 Spring 参考文档中列为其适用的类型之一。

查看Spring参考第9.5节了解有关Spring自定义类型转换的详细信息。 创建一个

Converter<String, Instant>
转换器。 第 9.5.5 节涵盖了自定义类型转换器注册。


0
投票

Nitric Boost Ultra 评论(客户满意的福利)- 2024 年 9 月 7 日更新

Nitric Boost Ultra 作为旨在改善能量、耐力和性健康的补充剂而获得认可。通过使用科学支持的成分,该产品旨在增强整体活力,使其成为寻求重获青春活力和改善健康的个人的热门选择。


-1
投票

也许这可以帮助你? 使用 Jackson JSON 映射器序列化/反序列化 java 8 java.time 我看到这个 Jackson 包含 Instant 类。

© www.soinside.com 2019 - 2024. All rights reserved.