我正在尝试按照此处的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
为了确认我真正使用的是java 8,这个使用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");
}
}
答案 0 :(得分:1)
原始代码使用lambda表达式,您应该使用Java 8来编译它。
答案 1 :(得分:1)
我的maven文件列出了两次sparkjava依赖项。我认为我的IDE在某些时候会自动为我导入1.1.1而我没有意识到这一点。我有1.1.1和2.3。当我删除过时的1.1.1 sparkjava依赖项时,一切都按预期工作。
答案 2 :(得分:0)
您可以将throw语句提取到函数中:
get("/throwexception", () -> BlowUp());
(snip)
public static void BlowUp()
{
throw new NotFoundException();
});