不编译:sparkjava 异常处理

doesn't compile: sparkjava exception handling

我正在尝试按照位于此处的 sparkjava 异常处理示例进行操作,但没有成功:http://sparkjava.com/documentation.html#exception-mapping。看来他们发布的代码不太正确?我能够修复其中一种已发布的方法,以便它可以编译。文档页面上未编译的方法是:

get("/throwexception", (request, response) -> {
    throw new NotFoundException();
});

我更改为这段代码并编译:

    get(new Route("/throwexception") {
        @Override
        public Object handle(Request request, Response response)  {
            throw new IllegalArgumentException();
        }
    });

但是,我无法编译此方法。怎么了?我正在使用 java 8 和 IntelliJ 社区版 15.0.2 进行编译。我的 java 模块设置为语言级别 8。这是可疑的方法:

    exception(Exception.class, (e, request, response) -> {
        //TODO: implement this after it compiles.
    });

这是我从编译器得到的错误:

Error:(83, 9) java: cannot find symbol
  symbol:   method exception(java.lang.Class<java.lang.Exception>,(e,request[...]->{ })
  location: class org.me.JournalController

为了确认我确实在使用 java8,这个使用 lambda 表达式的例子确实可以编译:

public class Lambdas {
    public static void main(String[] args) throws Exception {
        new Lambdas().start();
        Thread.sleep(1000);
    }

    public void start(){
        Interface f = () -> System.out.println("test");
    }
}

原代码使用了lambda表达式,你应该使用Java8来编译。

我的 maven 文件列出了两次 sparkjava 依赖项。我认为我的 IDE 在某些时候自动为我导入了 1.1.1 而我没有意识到。我有 1.1.1 和 2.3。当我删除过时的 1.1.1 sparkjava 依赖项时,一切都按预期工作。

您可以将 throw 语句提取到一个函数中:

get("/throwexception", () -> BlowUp());

(snip)

public static void BlowUp()
{
    throw new NotFoundException();
});