1

使用 Play 2 我想创建一个 REST API,其中应包括

/resource/<startDateTime>

意思是返回startDateTime大于 URL 中给出的 startDateTime 的所有资源项。

所以现在我需要一些 DateTime 格式,它可以通过 URL 以人类可读的格式传递,并且仍然很容易解析为我的 Play 2 控制器中的 Java Date 对象。对此有任何提示/最佳实践吗?感谢您的任何提示!

更新:如果 Play 能为我做解析,那就更好了。对于路由配置中的 java.util.Date 我收到错误

 No QueryString binder found for type java.util.Date. Try to implement an implicit QueryStringBindable for this type. 

是否有任何预定义来解析日期?

更新:

预期输入:可能是例如

http://site.com/resource/20121231-141557 # 2012/12/31 14:15:57

或某事。否则,易于阅读 - 我不在乎,只要它可以使用 URL 传输并且易于解析为 Date 对象。

4

3 回答 3

1

日期有一个 ISO 标准,编号 8601。

http://en.wikipedia.org/wiki/ISO_8601

日期和时间值从最重要到最不重要进行组织:年、月(或周)、日、小时、分钟、秒和秒的小数部分。

于 2012-12-31T17:46:14.773 回答
0

您可以在此处查看本机 Play2 路径绑定器: https ://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/mvc/Binders.scala#L251

目前,没有什么可以处理参数中的日期。

但是您可以使用ISO 8601格式(使用ISODateTimeFormat)在 DateTime (JodaTime) 之上编写自己的 PathBinder

我认为这将是一个很好的拉取请求;)

于 2013-01-02T09:45:04.520 回答
0

看来您在这里有两个问题:

  1. 如何轻松格式化和解析日期?我认为在 java 中处理日期的最佳库是Joda Time。它具有格式化和解析不同格式日期的方法。
  2. 如何使用自定义解析器定义路由?为此,您需要定义自己的 QueryStringBindable。以这个关于双打的答案为例。
于 2012-12-31T18:29:54.443 回答