grails - 覆盖 Groovy 的 java.util.Date toString 方法

标签 grails groovy elasticsearch

我有一个 Grails(版本 2.5.0;Groovy 版本 2.4.3)应用程序,其中我有一个 CustomPropertyEditorRegistry 在使用字段值时覆盖日期格式。

我安装了 ElasticSerach Grails 插件版本 0.0.4.4,安装后我注意到自定义属性编辑器不再工作。为了暂时解决这个问题,我决定使用 Groovy 的元编程简单地覆盖 java.util.Date 的 toString() 方法。

我将其添加到 Bootstrap.groovy:

Date.metaClass.toString = {
   return delegate.format("MM/dd/yyyy HH:mm")
}

但是,当我转到 Grails 控制台时(使用 Grails 控制台插件):

new Date("Fri Jun 12 12:36:02 EDT 2015") as String == "Fri Jun 12 12:36:02 EDT 2015"
new Date("Fri Jun 12 12:36:02 EDT 2015").toString() == "06/12/2015 12:36"

println(new Date("Fri Jun 12 12:36:02 EDT 2015")) // prints Fri Jun 12 12:36:02 EDT 2015
println(new Date("Fri Jun 12 12:36:02 EDT 2015").toString()) // prints 06/12/2015 12:36 

任何解决自定义属性问题和/或覆盖 Date toString() 的帮助将不胜感激。我在 ElasticSearch Grails 插件 GitHub 上也开了一个问题,问题 #115

编辑:

我已经用 Grails 和 Groovy 执行了更多测试。

我在 Bootstrap.groovy 中使用以下代码创建了一个新的 Grails 2.5.0 应用程序:

Date.metaClass.toString = {
    return delegate.format("MM/dd/yyyy HH:mm")
}

并将其添加到 index.gsp View 中:

<ul>
    <li>new Date().toString() == ${new Date().toString()}</li>
    <li>new Date() == ${new Date()}</li>
    <li>new Date() as String == ${new Date() as String}</li>
</ul>

/*Output:
new Date().toString() == 06/15/2015 10:32
new Date() == Mon Jun 15 10:32:33 EDT 2015
new Date() as String == Mon Jun 15 10:32:33 EDT 2015
*/

我还使用 Groovy 版本 2.4.3 启动了 groovyConsole,代码/输出如下:

Date.metaClass.toString = {
    return delegate.format("MM/dd/yyyy HH:mm")
}

println(new Date())
println(new Date() as String)
println(new Date().toString())

/*Output:
06/15/2015 10:38
Mon Jun 15 10:38:12 EDT 2015
Mon Jun 15 10:38:12 EDT 2015
*/

所以这似乎是 Groovy 中的一个不一致之处,它没有从修改后的元类方法中调用 toString(),除非我做错了什么或误解了什么。

最佳答案

您说您正在使用 Groovy 控制台,但您的意思是您正在运行 grails 控制台,对吗? BootStrap 在启动控制台时不运行,仅在 run-app 和测试中运行。如果您在控制台中运行 toString 覆盖,然后运行您的示例代码,它应该可以正常工作。

关于grails - 覆盖 Groovy 的 java.util.Date toString 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30808320/

相关文章:

java - 需要 GPath 查询来查找最大日期 + 字符串字段

elasticsearch - Kibana将哪种持久性数据存储在path.data中?

grails - 为什么我的TRACE会收到groovy.lang.MissingPropertyException?

grails - 修改字段以存储到数据库

java - 如何在 Gradle 的构建脚本中将插件作为 Map 应用?

elasticsearch - 使用 “/”和 “-”不区分大小写的搜索

elasticsearch 按数组字段的大小进行过滤

json - Grails 获取子域对象

java - 如何在Grails的脚手架 View 中显示ID列?

gradle - groovy中的Lambda表达