gpt4 book ai didi

java - 在 Spring Boot 2 中,我如何接受 LocalDates 作为 RequestParams

转载 作者:行者123 更新时间:2023-11-30 10:19:12 26 4
gpt4 key购买 nike

我正在使用 Spring Boot 2.0.0 RC1。我可以看到这个变化:https://github.com/spring-projects/spring-boot/commit/2fa0539e7f7bf93505f67303955cc7da6f9f5846和我的类路径上的 WebConversionService 类。我可以用我选择的日期格式提供它的一个 bean。然而这:

@RequestMapping(value = ["/test"], method = [RequestMethod.GET])
fun test2(@RequestParam param: LocalDate): LocalDate {
return param
}

当我用“2018-01-01”调用它时仍然不起作用。我知道我可以使用 @DateTimeFormat 但我试图避免这种情况并全局设置格式(或者理想情况下根本不设置它并让它正常工作,就像解析 JSON 主体一样)

最佳答案

要使这个新功能起作用,您需要在 application.properties 中设置 spring.mvc.date-format 属性。

请注意,使用通用 ISO 格式 yyyy-MM-dd 似乎存在问题:当我尝试这样做时,我遇到了以下异常:

无法将“java.lang.String”类型的值转换为所需类型“java.time.LocalDate”;嵌套异常是 org.springframework.core.convert.ConversionFailedException:无法从类型 [java.lang.String] 转换为类型 [@org.springframework.web.bind.annotation.RequestParam java.time.LocalDate] 的值 '2018 -04-20';嵌套的异常是 java.lang.IllegalArgumentException: Parse attempt failed for value [2018-04-20]

通过调试,发现根本原因是这个异常:

无法解析文本“2018-04-20”:无法从 TemporalAccessor 获取 LocalDate:{DayOfMonth=20,YearOfEra=2018,MonthOfYear=4},java.time.format.Parsed 类型的 ISO

我还发现用于解析的 DateTimeFormattertoString() 表示:

Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)

假设无法获得 LocalDate 的原因是构造的 TemporalAccessor 缺少 的值>Era 字段,但有填充的 YearOfEra 字段。

所以我尝试使用 uuuu-MM-dd 代替(请参阅 here 以了解 yu 之间的区别),这很有效完美:

spring.mvc.date-format=uuuu-MM-dd

更新

新开了一个issue在 GitHub 上。

关于java - 在 Spring Boot 2 中,我如何接受 LocalDates 作为 RequestParams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48774563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com