[英]Grails 2.5.5 error with 'as JSON' on a domain class that has an equals method
當我嘗試從springSecurityService獲取當前登錄用戶並將其呈現為JSON時,我剛剛遇到錯誤。
def user = springSecurityService.getCurrentUser()
println user as JSON // EXCEPTION!
用戶是一個域類並且有一個equals方法,下面的錯誤發生是因為'as JSON'似乎在調用equals方法(我不明白為什么)。
用戶看起來像這樣:
class User implements Serializable {
...
String username
String password
String email
...
@Override
boolean equals(other)
{
is(other) || (other.instanceOf(User) && other.username == username)
}
...
}
這是例外:(錯誤發生在.instanceOf(User)上)
2016-10-11 05:40:24,706 [http-bio-8090-exec-1] ERROR errors.GrailsExceptionResolver - MissingMethodException occurred when processing request: [POST] /ehr/query/save
No signature of method: org.codehaus.groovy.grails.web.json.JSONObject$Null.instanceOf() is applicable for argument types: (java.lang.Class) values: [class com.cabolabs.security.User]. Stacktrace follows:
Message: No signature of method: org.codehaus.groovy.grails.web.json.JSONObject$Null.instanceOf() is applicable for argument types: (java.lang.Class) values: [class com.cabolabs.security.User]
Line | Method
->> 45 | equals in com.cabolabs.security.User
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 176 | value in grails.converters.JSON
| 134 | render . in ''
| 250 | save in com.cabolabs.ehrserver.query.QueryController
| 198 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 53 | doFilter in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
| 62 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run . . . in java.lang.Thread
有人試驗過嗎? 這是預期的行為還是錯誤?
盡量不要自己給equals()
實現,並使用Groovy提供的@EqualsAndHashCode
注釋。 看看是否有效。
要么
事先檢查instanceOf()
可用性,就像這樣
(obj.respondsTo('instanceOf') && obj.instanceOf(User))
使用respondsTo()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.