我有一个rest控制器,它有一个请求参数:
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") ZonedDateTime startDate
当我将数据发布到控制器中时:
startDate=2020-12-02T18:07:33.251Z
但是,我得到一个错误的400请求错误:
2020-12-02 18:20:32.428 WARN 26384 --- [nio-2000-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.time.ZonedDateTime'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.ZonedDateTime] for value '2020-12-02T18:07:33.251Z'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2020-12-02T18:07:33.251Z]]
1条答案
按热度按时间11dmarpk1#
你的约会时间串,
2020-12-02T18:07:33.251Z
已使用的默认格式ZonedDateTime#parse
.演示:
输出:
这意味着你可以指定格式,
DateTimeFormatter.ISO_ZONED_DATE_TIME
,这是使用的默认格式ZonedDateTime#parse
. 将注解更改为或
查看spring文档页面以了解关于第二个选项的更多信息。
其他一些重要注意事项:
在任何情况下,都不要随便引用一句话
Z
代表什么Zulu
表示日期和时间UTC
(区域偏移为+00:00
小时);相反,使用X
用于区域偏移。演示:
输出:
查看datetimeformatter了解更多信息。
此模式适用于
SimpleDateFormat
也。演示:
但是,api的日期时间
java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。