Java Spark 服务器 NoSuchMethodError
Java Spark server NoSuchMethodError
这里是有问题的代码:
post("user/login ", (request, response) -> {
return "hello";
});
下面是 return 语句之后发生的错误:
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getHeaders(Ljava/lang/String;)Ljava/util/Collection;
at spark.utils.GzipUtils.checkAndWrap(GzipUtils.java:64)
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:251)
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:61)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
at org.eclipse.jetty.server.Server.handle(Server.java:517)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:302)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:245)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.SelectChannelEndPoint.run(SelectChannelEndPoint.java:75)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
at org.eclipse.jetty.util.thread.QueuedThreadPool.run(QueuedThreadPool.java:572)
at java.lang.Thread.run(Thread.java:745)
据我了解,我的 jar 中存在一些版本问题 - 以下是我正在使用的 jar:
我正在使用maven,并遵循the directions found in Spark's documentation。我怎样才能克服这个错误?
找到了!我打印出了类路径上的所有内容。以下是其中的一些条目:
...../lib/javax.servlet-api-3.1.0.jar
...../idea-IU-143.1821.5%20(2)/lib/servlet-api.jar
事实证明 Intellij 正在加载一些我不知道的东西(也许我让它这样做,不确定)与我需要的 jar 冲突。我进入那个目录并重命名了 Intellij jar。它显然在 Intellij 中引起了一些问题(它报告了一些内部 IDE 错误)但我的代码现在可以工作了。
我想知道为什么 Intellij 的 jars 会与我的项目有任何关系...哎呀。
我转到“文件”>“项目结构”>“库”,然后删除了 javax.servlet-api 2.5(保留 3.1.0)。
这里是有问题的代码:
post("user/login ", (request, response) -> {
return "hello";
});
下面是 return 语句之后发生的错误:
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getHeaders(Ljava/lang/String;)Ljava/util/Collection;
at spark.utils.GzipUtils.checkAndWrap(GzipUtils.java:64)
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:251)
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:61)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
at org.eclipse.jetty.server.Server.handle(Server.java:517)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:302)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:245)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.SelectChannelEndPoint.run(SelectChannelEndPoint.java:75)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
at org.eclipse.jetty.util.thread.QueuedThreadPool.run(QueuedThreadPool.java:572)
at java.lang.Thread.run(Thread.java:745)
据我了解,我的 jar 中存在一些版本问题 - 以下是我正在使用的 jar:
我正在使用maven,并遵循the directions found in Spark's documentation。我怎样才能克服这个错误?
找到了!我打印出了类路径上的所有内容。以下是其中的一些条目:
...../lib/javax.servlet-api-3.1.0.jar
...../idea-IU-143.1821.5%20(2)/lib/servlet-api.jar
事实证明 Intellij 正在加载一些我不知道的东西(也许我让它这样做,不确定)与我需要的 jar 冲突。我进入那个目录并重命名了 Intellij jar。它显然在 Intellij 中引起了一些问题(它报告了一些内部 IDE 错误)但我的代码现在可以工作了。
我想知道为什么 Intellij 的 jars 会与我的项目有任何关系...哎呀。
我转到“文件”>“项目结构”>“库”,然后删除了 javax.servlet-api 2.5(保留 3.1.0)。