java - GrailsParameterMap 在 Grails 中不可序列化

标签 java grails

在我的 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/

相关文章:

java - 如何从二维数组中获取元素而不循环整个数组?

Java 如何识别照片颜色?

java - 如何使用 Apache Camel 处理长时间运行的任务

tomcat - Grails 3.1.4 应用程序部署错误

java - 多维数组和高级 for 循环

java - 如何在不同实现/类/等的java中调用toString()

xml - 如何在没有转义字符的情况下使用grails生成真正的UTF-8 XML?

database - Grails 应用程序的每个 cloudfoundry 部署都丢失了数据库数据

grails - Grails GORM默认排序字段,它也是组合键的字段

html - 如何使用Groovy从XML文件提取HTML代码