【问题标题】:Got NotSerializableException when putting Guava MultiTreemap in http session将 Guava MultiTreemap 放入 http 会话时出现 NotSerializableException
【发布时间】:2014-10-03 18:33:16
【问题描述】:

我想将 Guava TreeMultimap 的实例放入 http 会话,但我不断收到此异常:NotSerializableException

有人知道如何解决这个问题吗?

我的控制器如下所示:

@Controller
public class MyController
{

        public void doStuff(HttpServletRequest request, HttpServletResponse response)
        {

                TreeMultimap<String, MyCustomClass> myMap = TreeMultimap.create(
                     new Comparator<String>()
                     {
                          @Override
                          public int compare(String o1, String o2)
                          {
                              return o1.compareTo(o2);
                          }
                     },
                     new Comparator<MyCustomClass>()
                     {
                           @Override
                           public int compare(MyCustomClass o1, MyCustomClass o2)
                           {
                               return o1.compareTo(o2);
                           }
                      });

                      request.getSession().setAttribute("MyAttribute", myMap); //==> ERROR HERE!

          }
 }

【问题讨论】:

    标签: java spring-mvc serialization model-view-controller guava


    【解决方案1】:

    问题似乎在于您的Comparators 不是Serializable。让每个类都成为实现ComparatorSerializable 的非匿名类,你应该没问题。

    实际上,由于您的两个Comparators 都只是实现自然排序,您应该能够编写

    TreeMultimap<String, MyCustomClass> myMap = TreeMultimap.create();
    

    【讨论】:

    • 嘿科林。刚刚编辑了我的问题。第二种泛型类型是自定义类,而不是 String
    • @abcXYZ:更新了答案。
    • 是的。我发现问题是因为我的MyCustomClass 不可序列化。让它实现Serializable,现在一切正常。谢谢
    猜你喜欢
    • 2012-01-29
    • 2014-11-05
    • 2019-05-24
    • 2020-05-18
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2017-11-22
    相关资源
    最近更新 更多