使用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对象。
日期有一个ISO标准,编号8601。
http://en.wikipedia.org/wiki/ISO_8601日期和时间值按最重要到最不重要的顺序排列:年、月(或周)、日、时、分、秒和秒的小数。
你似乎有两个问题:
- 如何格式化和解析日期容易?我认为在java中处理日期最好的库是Joda Time。它具有格式化和解析不同格式日期的方法。
- 如何用自定义解析器定义路由?为此,您需要定义自己的QueryStringBindable。请看下面这个关于double的回答。
您可以在这里查看本地Play2路径绑定:https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/mvc/Binders.scala#L251
目前,参数中没有任何东西可以处理Date。
但是你可以在DateTime (JodaTime)上面写你自己的PathBinder,使用ISO 8601格式(使用ISODateTimeFormat)
我认为这将是一个很好的Pull request;)