路径可绑定日期播放框架

时间:2018-07-31 16:09:17

标签: playframework simpledateformat

我正在尝试通过我的Play框架应用中的一条路线传递日期,这是我的新手。几个小时后,我现在试图获取一个pathbindable来与下面的代码一起工作,但是每当我运行它时,我总是收到“无效的日期格式等等”的错误请求,我如何才能成功地将日期传递给控制器​​?请帮助

package libs

import java.util.Date
import java.text.SimpleDateFormat
import play.api.mvc.PathBindable
import scala.util.{Either, Failure, Success, Try}

object PathBinders {

  implicit def bindableDate(implicit stringBinder: PathBindable[String]) = new PathBindable[Date] {

    val sdf = new SimpleDateFormat("EEE MMM ddd hh:mm:ss zzz yyyy")

    override def bind(key: String, value: String): Either[String, Date] = {
      for {
        dateString <- stringBinder.bind(key, value).right
        date <- Try(sdf.parse(dateString)).toOption.toRight("Invalid date format blah blah.").right
      } yield date
    }

    override def unbind(key: String, date: Date): String = key + "=" + sdf.format(date)

  }

}

它的格式我尝试了多种不同的方法,但是在我成功将日期显示为Bhu 2018年5月10日00:00:00 BST之前,在我的应用程序页面中。这来自于一个链接到SQL数据库。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作来处理从viewscontroller方法的日期信息:

  1. 拥有一条路线并将其作为查询字符串传递:

    POST   /passDate  controllers.date.request(datetime: String) 
    
  2. 将其传递给请求,因为它与路径不安全相关(可能用-或任何有效的URL字符替换空格):

    /passDate?datetime=1-1-1970 
    
  3. 在请求中,拆分datetime查询字符串,然后放回一起:

    scala> "Thu May 10 00:00:00 BST 2018".split(' ').toList
    res1: List[String] = List(Thu, May, 10, 00:00:00, BST, 2018)
    
  4. 然后根据列表中的位置知道什么是日期时间信息,您可以将它们转换为任何字符串文字并进行解析。例如:

    scala>  val formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    formater: java.text.SimpleDateFormat = java.text.SimpleDateFormat@4f76f1b0
    
    scala> formatter.parse("2018-08-01 14:58:00")
    res2: java.util.Date = Wed Aug 01 14:58:00 BST 2018