我想将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!

          }
 }

最佳答案

看来问题在于您的Comparator不是Serializable。将每一个都实现为同时实现ComparatorSerializable的非匿名类,应该没问题。

实际上,由于您的两个Comparator都只是在实现自然顺序,因此您应该能够编写

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

10-08 03:43