【问题标题】:Error trying to set up Spark REST example尝试设置 Spark REST 示例时出错
【发布时间】:2016-03-05 11:05:55
【问题描述】:

我正在尝试设置简单的 Spark REST 示例,如下所述: http://sparkjava.com/documentation.html

当我浏览到: http://localhost:4567/hello

我收到此错误:

[qtp346024113-15] WARN org.eclipse.jetty.server.HttpChannel - //localhost:4567/hello
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:308)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.SelectChannelEndPoint$2.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$3.run(QueuedThreadPool.java:572)
at java.lang.Thread.run(Thread.java:745)

看起来类路径有问题,但我不知道缺少哪些依赖项。

我的 pom.xml 中 Spark 的依赖如下:

 <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>9.3.6.v20151106</version>
    </dependency>


  <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-http</artifactId>
        <version>9.3.6.v20151106</version>
    </dependency>

  <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-util</artifactId>
        <version>9.3.6.v20151106</version>
    </dependency>
  <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-io</artifactId>
        <version>9.3.6.v20151106</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-server</artifactId>
        <version>9.3.3.v20150827</version>
    </dependency>

<dependency>
   <groupId>org.eclipse.jetty.websocket</groupId>
   <artifactId>websocket-servlet</artifactId>
   <version>9.3.3.v20150827</version>
</dependency>

代码:

package com.hello.rest.api;

 import static spark.Spark.*;

public class RestAPI {

public RestAPI() {

}


public static void main(String[] args) {
    System.out.println("Processing hello");
    get("/hello", (req, res) -> "Hello World");
}


}

【问题讨论】:

  • 你在你的 POM 上声明这些依赖?另外,显示您的代码。我不清楚您提到的“简单 Spark REST 示例”是什么。
  • 你的 POM 呢?您是否定义了所有这些依赖项?

标签: java rest spark-java


【解决方案1】:

正如错误所暗示的,方法 getHeaders 在被调用的 HttpServletResponse 类中不存在。

这个方法从 Servlet 3.0 开始就存在了。

确保您的类路径不包含旧版本的 Servlet API,其中包括类 javax.servlet.http.HttpServletResponse 。

另外,您的某个依赖项可能包含它的旧版本。

【讨论】:

  • 你知道如何排除build.gradle中旧版本的servlet api吗?我试过exclude,但它似乎不起作用。
  • @Ye Lin Aung : 不抱歉,我对 gradle 了解不多。
  • 使用 maven 可以查看依赖项是否使用带有 mvn dependency:tree 的旧 api 版本并搜索带有 javax.servlet:servlet-api:jar:X.Y 的行。
猜你喜欢
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 2014-01-27
  • 2014-12-08
相关资源
最近更新 更多