我正在尝试编写一个 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
知道我为什么会收到这个吗?
谢谢你
错误消息是不言自明的: 没有注册
String
到 Instant
转换器。
当
Controller
收到请求时,所有参数都是String
。 Spring/Jackson 提供了大多数基本类型的预定义转换器列表:
- 字符串 > 整数
- 字符串 > 布尔值
但是没有默认的 String > Instant 转换器。
您需要创建并注册一个。或者你可以使用
@DateTimeFormat
注释将输入类型更改为 Spring 可以处理的类型:
如何在 Spring MVC 控制器的 GET 请求中接受日期参数?
我怀疑 @DateTimeFormat 不适用于
Instant
字段。
具体来说,
Instant
未在 Spring 参考文档中列为其适用的类型之一。
查看Spring参考第9.5节了解有关Spring自定义类型转换的详细信息。 创建一个
Converter<String, Instant>
转换器。
第 9.5.5 节涵盖了自定义类型转换器注册。
Nitric Boost Ultra 评论(客户满意的福利)- 2024 年 9 月 7 日更新
Nitric Boost Ultra 作为旨在改善能量、耐力和性健康的补充剂而获得认可。通过使用科学支持的成分,该产品旨在增强整体活力,使其成为寻求重获青春活力和改善健康的个人的热门选择。
也许这可以帮助你? 使用 Jackson JSON 映射器序列化/反序列化 java 8 java.time 我看到这个 Jackson 包含 Instant 类。