当前位置: 首页 > 知识库问答 >
问题:

GrailsParameterMap在Grails中不可序列化

白飞飙
2023-03-14

在tomcat上运行的grails应用程序中,当我在http会话中保存一个如下所示的映射时,我得到一个异常GrailsParameterMap不可序列化

session.nextUrl = [controller: controllerName,
                               action: actionName,
                               params: params]

当我如下更改上面的代码片段时,我也得到了同样的异常,甚至java.util。HashMap实现了可序列化。

java.util.Map nextUrl = new java.util.HashMap()

nextUrl.put("controller", controllerName)
nextUrl.put("action", actionName)
nextUrl.put("params", params)
session.setAttribute("nextUrl", nextUrl) 

我还可以看到get/set-in会话工作正常。

我该如何解决这个问题。

先谢谢你,普拉尚特

共有1个答案

梁楷
2023-03-14

问题是在控制器中保存参数的paramsmap类型(GrailsParameterMap)没有实现Serializable接口,这就是您获得异常的原因。我现在想到的解决方案需要您专门为params创建一个新的hashmap并将所有参数复制到那里并将该HashMap保存到会话,例如:

// 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)
 类似资料:
  • 问题内容: 如何序列化未实现Serializable的对象?我不能将其标记为Serializable,因为该类来自第3方库。 问题答案: 您不能序列化未实现的类,但可以将其包装在可以实现的类中。为此,您应该在包装器类上实现和,以便可以以自定义方式序列化其对象。 首先,使您的非序列化字段。 在中,首先调用流以存储所有非瞬态字段,然后调用其他方法来序列化不可序列化对象的各个属性。 在中,首先调用流以读

  • 我试图从python向json文件发送一个简单的字典,但我一直收到“TypeError:1425不是json可序列化的”消息。 如果我添加默认参数,那么它会写入,但整数值会作为字符串写入json文件,这是不可取的。

  • 我目前正在尝试扩展一个使用Scala和Spark的机器学习应用程序。我正在使用我在Github上找到的Dieterich Lawson之前项目的结构 https://github.com/dieterichlawson/admm 该项目基本上使用SparkContext来构建训练样本块的RDD,然后对每个样本集执行局部计算(例如求解线性系统)。 我遵循同样的方案,但为了进行局部计算,我需要对每个训

  • 我有一个没有扩展可串行化或可外部化接口的类,但在netbeans中使用FindBugs时仍然会遇到错误。有人能告诉我如何解决这个问题吗? 这是我的课 FindBug中的Bug:类分析器定义了一个非瞬时的非序列化实例字段objAnalyzerVar,对于objAnalyzerDataTypeInfo也是如此;

  • 问题内容: 我在android / java中对Location的子类进行序列化遇到了麻烦 位置不可序列化。我有一个名为FALocation的第一个子类,它没有任何实例变量。我已经宣布它可序列化。 然后,我有一个名为Waypoint的第二个类,看起来像这样: 序列化工作正常。 反序列化会产生跟随翼异常(腿对象包含一个航路点): 问题答案: 序列化位置绝对必要吗?也许您可以将其标记为瞬态,并在反序列

  • 问题内容: 我有一个实现Serializable的类。现在,我扩展了该类,并且希望此扩展的类不可序列化。那怎么办呢? 例如。我有 我有 但是我希望B类是不可序列化的。 问题答案: 正如其他人已经明确指出的那样,一个类的子类不可能是non- 。 如果要使子类的属性不被序列化,一种选择是使它们全部都是瞬时的。 如果您需要的还不止这些(您不希望将超类字段进行序列化),请覆盖并按此处概述- https: