如何解决如何将java.time.Instant用作Spring @PathVariable
我有一个REST控制器,需要从URL路径的一个组件中提取一个时间点。自然地(2020年),我想将时间点提取为java.time.Instant
。但是Spring URL模板代码(?)显然阻止了这一点。
我的控制器类是这样的:
@RestController
public class GameController {
...
@GetMapping("/api/scenario/{scenario}/game/{created}")
@Nonnull
public Game getGame(@Nonnull @PathVariable("scenario") final UUID scenario,@Nonnull @PathVariable("created") final Instant created) {
...
}
}
但是使用有效路径(例如/api/scenario/4d0f189d-4423-48e9-b935-98bdc5dafaac/game/2020-10-22T12:04:42.630911Z
)进行测试会导致HTTP 400错误请求状态代码。调试显示了这一点
- Spring解析第二个路径变量(
created
变量),而没有小数秒或时区后缀。也就是说,arg
中的AbstractNamedValueMethodArgumentResolver.resolveArgument(MethodParameter,ModelAndViewContainer,NativeWebRequest,WebDataBinderFactory)
值为2020-10-22T12:04:42
,而不是2020-10-22T12:04:42.630911Z
的完整正确值。 - Spring最终将该值传递给
java.time.Instant.parse(CharSequence)
方法以解析该值。之所以抛出DateTimeParseException
是因为缺少Z
后缀(“无法在索引19处解析文本'2020-10-22T12:04:42')。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。