java.lang.IllegalArgumentException : setAttribute: Non-serializable attribute 异常

标签 java

我继承了一些代码,但在尝试运行时出现错误。错误如下:

10:08:32,093 ERROR [MyServlet]:260 - Servlet.service() for servlet MyServlet threw exception
java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1270)
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1248)
at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:130)
at uk.co.my.servlet.MyServlet.doPost(MyServlet.java:121)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.my.ddi.security.SecurityContextServletFilter.doFilter(SecurityContextServletFilter.java:55)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:835)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Unknown Source)

我想主要的问题是它在 uk.co.my.servlet.MyServlet.doPost(MyServlet.java:172) 处访问了我的代码。 MyServlet 的第 121 行是 session.setAttribute("LISTENER", myListener);

这个 myListener 对象来自以下类:

public class myListener {
    static Log log = LogFactory.getLog(TerminationListener.class.getName());
    private boolean shouldCancel = false;

我将如何摆脱这个错误?我需要使用 transient 关键字吗?

最佳答案

如果您希望将 myListener 的实例放置在 session 中,您需要使其可序列化。 可能涉及使某些字段成为 transient 字段,但这些字段将不会保存在 session 中。您还需要使该类实现 Serializable

我建议你看看 documentation for Serializable ,其中详细介绍了有关序列化的内容。

关于java.lang.IllegalArgumentException : setAttribute: Non-serializable attribute 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/790705/

相关文章:

java - Spring 启动 : Use specific alias form keystore to consume HTTPS SOAP webservice

java - 3D:如何渲染/创建地形

java - 如何创建一个以唯一整数作为元素的数组

java - 在 Neo4J 图上进行多次更新的正确方法是什么?

java - 如何使用@KafkaListener spring boot 2消费者获取消费者id

java - 透明.png背景

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - menuitem.getmenuinfo() 为动态创建的 View 返回 null

java - 使用分隔符时,如何将\\s+ 与 [^A-Z0-9a-z] 结合起来?

java - 如何使 uiscrollable 找到 content-desc 而不是文本