我正在为我的应用程序制作一个简单的RESTful API。我在项目中制作了另一个程序包(另一个是我的主要Java类,Servlet和模型所在的程序包)。然后,我制作了非常简单的资源文件,如下所示:
package com.java.api;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
@Path("webservice")
public class ZipcodeService {
@GET
@Path("/lookup")
public Response lookup() {
return Response.ok().entity("Los Angeles").build();
}
}
这是我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" id="WebApp_ID"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<display-name>parking-space-booking-system</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.java.api</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
</web-app>
我没有使用Maven。我正在使用Netbeans IDE和Tomcat服务器。我将Jersey 2.25的所有jar文件上传到WEB-INF / lib文件夹。我正在尝试使用web.xml进行修复,但是我没有更多的想法。这是我的项目的结构:
这也是我收到的错误消息:
HTTP状态500-Servlet Jersey Web应用程序的Servlet.init()抛出异常
类型例外报告
Servlet Jersey Web应用程序的消息Servlet.init()引发异常
描述服务器遇到内部错误,导致服务器无法满足此请求。
例外
javax.servlet.ServletException:Servlet Jersey Web应用程序的Servlet.init()抛出异常
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:673)
org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1500)
org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1456)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)
org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
根本原因
java.lang.NoSuchMethodError:org.glassfish.jersey.CommonProperties.getValue(Ljava / util / Map; Ljavax / ws / rs / RuntimeType; Ljava / lang / String; Ljava / lang / Object; Ljava / lang / Class;)Ljava / lang / Object;
org.glassfish.jersey.jackson.JacksonFeature.configure(JacksonFeature.java:69)
org.glassfish.jersey.model.internal.CommonConfig.configureFeatures(CommonConfig.java:674)
org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:610)
org.glassfish.jersey.server.ResourceConfig.configureMetaProviders(ResourceConfig.java:800)
org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:367)
org.glassfish.jersey.server.ApplicationHandler.access $ 500(ApplicationHandler.java:162)
org.glassfish.jersey.server.ApplicationHandler $ 3.run(ApplicationHandler.java:304)
org.glassfish.jersey.internal.Errors $ 2.call(Errors.java:289)
org.glassfish.jersey.internal.Errors $ 2.call(Errors.java:286)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
org.glassfish.jersey.server.ApplicationHandler。(ApplicationHandler.java:301)
org.glassfish.jersey.servlet.WebComponent。(WebComponent.java:311)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:359)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:673)
org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1500)
org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1456)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)
org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
note注意在Apache Tomcat / 8.0.27日志中可以找到根本原因的完整堆栈跟踪。
Apache Tomcat / 8.0.27
最佳答案
也许您的库有问题。
root cause
java.lang.NoSuchMethodError: org.glassfish.jersey.CommonProperties.getValue(..
服务器初始化显示您忘记添加一些库(也许它不在您的Jersey 2.25中,请检查它)。您也可以尝试使用另一个版本的Jersey。
关于java - RESTful API-始终出现HTTP 500错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51956995/