Java REST API throws error "org.glassfish.jersey.server.ContainerException: java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_PROPERTIES"

Java REST API throws error "org.glassfish.jersey.server.ContainerException: java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_PROPERTIES"

我的 Java-backend 运行 在新安装的 Debian 9 机器上不再正常工作。一些调用有效,另一些调用失败并出现此错误堆栈:

org.glassfish.jersey.server.ContainerException: java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_PROPERTIES at org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:278) at org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:260) at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:509) at org.glassfish.jersey.server.ServerRuntime.run(ServerRuntime.java:334) at org.glassfish.jersey.internal.Errors.call(Errors.java:271) at org.glassfish.jersey.internal.Errors.call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:68) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:370) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:52) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.jetty.util.thread.QueuedThreadPool.run(QueuedThreadPool.java:543) at java.lang.Thread.run(Thread.java:748)

它没有给我任何提示,在我的代码中发生这种情况,在其他机器上,使用相同的导入,这是有效的。

与项目正常运行的服务器相比,我找不到所用库的任何差异。同样的 java 版本在服务器和我的机器上使用。

有人有什么想法吗?谢谢!

这很可能是 class路径问题,Glassfish 以某种方式选择了旧版本的 Jackson。 ACCEPT_CASE_INSENSITIVE_PROPERTIES 字段是在 Jackson 2.5 中引入的,因此请在 class 路径中查找早期版本。

尝试通过查找实现 Versioned 接口(例如 ObjectMapper)的 class 来记录 Jackson 版本。那应该告诉你class路径理论是否成立。