如何在Grails中将日期放入参数中

时间:2014-05-16 16:53:52

标签: grails controller integration-testing

我正在使用Grails 2.2.3中的Controller Test,我在域中有一个Date字段。 但是当你测试Controller时,你想把所有东西都放到params中,显然params必须拥有Strings中的所有内容。

如何将日期纳入params?

params的例子:

    params["issueNumber"] = 1
    params["dateOfIssue"] = "2014-05-16 09:17:38 EDT"
    params["placements"] = [location:"Sample location", page:1, column:1, row:1]
    params["newsPaper"] = [name:"Sample Ad Name"]

对于“展示位置”& “newsPaper” - 它们是其他领域的参数。 上面的示例在controller.save()上失败,并且没有输出太多有用的信息。

谢谢。

3 个答案:

答案 0 :(得分:1)

它取决于params绑定到命令对象或域类的方式,如果它完全绑定的话。考虑到域类直接绑定在具有名为dateOfIssue的字段的控制器操作中,以下是必须使用的默认日期格式

yyyy-MM-dd HH:mm:ss.S

现在,如果您使用Grails 2.3。*,也可以通过添加grails.databinding.dateFormats作为日期格式提供配置设置来全局自定义:

grails.databinding.dateFormats = [
    'MMddyyyy', 'yyyy-MM-dd HH:mm:ss.S', "yyyy-MM-dd'T'hh:mm:ss'Z'"
]

有关详细信息,请参阅date formats for data binding文档。

对于Grails 2.2.3,请参考this question以绑定自定义日期格式。希望有所帮助。

另外,不管整个数据绑定的东西,如果根本没有使用,那么显然你的应用程序在转换下标准化的格式可以用来从String中获取日期:

Date.parse("yyyy-MM-dd HH:mm:ss Z", "2014-05-16 09:17:38 EDT")

答案 1 :(得分:0)

我发现了另一种通过params传递日期的方法,它可能不像dmahapatro那样漂亮,但它不需要任何修改。示例:

    params["dateOfIssue"] = "Fri May 16 00:00:00 EDT 2014"
    params["dateOfIssue_year"] = "2014"
    params["dateOfIssue_month"] = "5"
    params["dateOfIssue_day"] = "16"

原始字段名称为“dateOfIssue”。

答案 2 :(得分:0)

您可以创建一个StringToDateValueConverter来完成此任务。

See this(也可以识别区域设置)