在域类初始化中使用编码器

时间:2012-10-03 19:01:05

标签: hibernate grails

有趣的问题:

我有一个类似于

的域类
class Dummy {
    String key = (''+new Date()).encodeAsSHA256()
}

当我尝试启动我的应用程序时,我收到一条长的堆栈跟踪/错误消息,说明

Invocation of init method failed; nested exception is org.hibernate.InstantiationException: could not instantiate test objectmad.Dummy
...
Caused by MissingMethodException: No signature of method: java.lang.String.encodeAsSHA256() is applicable for argument types: () values: []

现在,如果我删除.encodeAsSHA256(),以开发模式启动应用程序并重新插入编码,它可以工作: - )

基本上,代码运行@ runtime,但似乎@初始化时间,String类尚未为编码器做好准备。

知道如何在不创建自定义构造函数的情况下解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

找到了一个解决方案:编码器也可以直接调用,但你必须知道正确的包......

import org.codehaus.groovy.grails.plugins.codecs.SHA256Codec

class Dummy {
    String key = SHA256Codec.encode(''+new Date())
}

......解决问题...

答案 1 :(得分:0)

为什么不是构造函数?这属于构造函数......