java - GrailsParameterMap 在 Grails 中不可序列化

原文 标签 java grails

在我在 tomcat 上运行并在应用程序服务器之间进行 session 复制的 grails 应用程序中,当我按如下方式在 http session 中保存 map 时,出现异常 GrailsParameterMap is not Serializable -

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 中的获取/设置工作正常。

我该如何解决这个问题。

提前致谢,
普拉尚

最佳答案

问题是 params在 Controller 中保存参数的映射类型 ( GrailsParameterMap ) 未实现 Serializable界面,这就是你得到异常的原因。我现在想到的解决方案要求您专门为 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/

相关文章:

data-binding - grails datePicker 数据绑定(bind)

grails - 从 .js 文件创建资源链接

grails - Grails域get(params.id)可在Controller.show()中工作,但不能在Contoller.edit()中工作

oracle - 如何配置 Grails id 列以在 Oracle 上使用 UUID?

java - Android Listview 不刷新

java - 如何在javax.JSON中对Java对象进行序列化/反序列化

java - 查询在mysql中有效,但在Java中不起作用

java - JAXB XSLT 属性替换

java - 如何为 Struts2 Web 应用程序中的多个登录配置 web.xml?

Grails Beans - 定义值列表