RESTful API-始终出现HTTP 500错误

时间:2018-08-21 21:35:16

标签: java rest api jersey http-status-code-500

我正在为我的应用程序制作一个简单的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进行修复,但我没有其他想法。这是我的项目的结构:

enter image description here

这也是我收到的错误消息:

HTTP状态500-Servlet Jersey Web应用程序的Servlet.init()抛出异常

类型异常报告

Servlet Jersey Web应用程序的

message 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

2 个答案:

答案 0 :(得分:1)

您需要查看(并发布)Tomcat日志。查看catalina.out。在我看来,您的web.xml没有结束的web-app标签,但这可能只是因为您没有发布完整的web.xml。

此外,您需要将应用程序打包为WAR文件。 Tomcat希望您的Web应用程序WAR文件位于webapps目录下。

编辑:

找不到该方法,因此相应的JAR实际上不在类路径(lib文件夹)上。

org.glassfish.jersey.CommonProperties.getValue

答案 1 :(得分:1)

也许您的库有问题。

root cause

java.lang.NoSuchMethodError: org.glassfish.jersey.CommonProperties.getValue(..
服务器初始化

表示您忘记添加一些库(也许它不在您的Jersey 2.25中,请检查它)。您也可以尝试使用另一个版本的Jersey。