java - Jersey 和 Java 8(Lambda 表达式)

标签 java rest lambda jersey java-8

我使用 Jersey 版本 1.18.1 (com.sun.jersey)、Spring 和 Java 8。如果我将 Java 8 Lambda 表达式放入 REST 服务中,它会崩溃。如果我删除 lambda 表达式,它将起作用。

@Service
@Path("/hello")
public class Hello {

    @GET
    public String hello() {
        new ArrayList<String>().stream().filter((str) -> str.length() > 0);
        return "hello";
    }

}

我使用的是 com.sun.jersey(1.18.1 版本)。

完整的堆栈跟踪:

SEVERE: Allocate exception for servlet jersey-serlvet java.lang.ArrayIndexOutOfBoundsException: 52264
    at jersey.repackaged.org.objectweb.asm.ClassReader.readClass(ClassReader.java:1976)
    at jersey.repackaged.org.objectweb.asm.ClassReader.accept(ClassReader.java:464)
    at jersey.repackaged.org.objectweb.asm.ClassReader.accept(ClassReader.java:420)
    at com.sun.jersey.spi.scanning.AnnotationScannerListener.onProcess(AnnotationScannerListener.java:138)
    at com.sun.jersey.core.spi.scanning.uri.FileSchemeScanner$1.f(FileSchemeScanner.java:86)
    at com.sun.jersey.core.util.Closing.f(Closing.java:71)

请告诉我如何修复它。

最佳答案

Jersey 1.18 与 java 8 不兼容。他们从 1.19 开始添加了 java 8 兼容性。

如果你看一下 Jersey 1.19 发行说明,你可以看到引入了 jdk8 支持。

https://github.com/jersey/jersey-1.x/releases/tag/1.19

引用 1.19 标签:

Thanks to @cowwoc you're able to run Jersey 1.x applications on JDK8

要解决此问题,您必须将 Jersey 升级到 1.19 或将 java 8 降级到 7。

关于java - Jersey 和 Java 8(Lambda 表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24232784/

相关文章:

java - Webview 未连接到 nanohttpd

rest - Spring 3.0 REST实现DispatcherServlet找不到映射

c# - 如何在 ASP.net 中安全地延迟 Web 响应?

c++ - 通用线程池类无法正常工作

java - 为什么 isInterrupted() 给出 Thread.currentThread().isInterrupted() 以外的结果(JAVA)

java - 创建 servlet 时出现非 java 源文件夹错误

java - 如何为 REST Web 服务创建 JUnit 测试?

java - 如何使用 Stream API 从对象中检索嵌套列表?

dart - Lambda表达式作为Dart语言中的函数参数

java - DbUnit Java仅在一次测试中禁用FOREIGN_KEY_CHECKS