在我的 grails 应用程序中运行在 tomcat 上并在应用程序服务器之间进行 session 复制,当我如下在 http session 中保存 map 时,我得到一个异常 GrailsParameterMap 不是可序列化的 -
session.nextUrl = [controller: controllerName,
action: actionName,
params: params]
当我按如下方式更改上面的代码片段时,即使 java.util.HashMap 实现了 Serializable,我也遇到了同样的异常。
java.util.Map nextUrl = new java.util.HashMap()
nextUrl.put("controller", controllerName)
nextUrl.put("action", actionName)
nextUrl.put("params", params)
session.setAttribute("nextUrl", nextUrl)
我还可以看到 session 中的 get/set 工作正常。
我该如何解决这个问题。
提前致谢, 普拉尚
最佳答案
问题是在 Controller 中保存参数的 params
映射类型 (GrailsParameterMap
) 没有实现 Serializable
接口(interface),这就是为什么你得到异常(exception)。我现在想到的解决方案要求您专门为 params
创建一个新的 hashmap 并将所有参数复制到那里并将该 HashMap
保存到 session 中,例如:
// this is my pseudocode - haven't been doing groovy and java for long time
java.util.Map paramMap = new java.util.HashMap() // copy params here
foreach(p in params)
{
paramMap.put(p.Key, p.Value)
}
java.util.Map nextUrl = new java.util.HashMap()
nextUrl.put("controller", controllerName)
nextUrl.put("action", actionName)
nextUrl.put("params", paraMap) // <- note paramMap, not params!
session.setAttribute("nextUrl", nextUrl)
关于java - GrailsParameterMap 在 Grails 中不可序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782548/