微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将java.time.Instant用作Spring @PathVariable

如何解决如何将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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?