【问题标题】:simple RESTful web services in java(JAX-RS) using jersey , throws HTTP Status 404java(JAX-RS)中使用 jersey 的简单 RESTful Web 服务,抛出 HTTP 状态 404
【发布时间】:2014-05-31 04:57:55
【问题描述】:

当我为 RESTful Web 服务 (JAX-RS) 运行我的简单 Java 代码时,它会引发 404 错误。我已经将它映射到 web.xml 并且没有编译错误。我在日志中收到的一条可疑消息是“INFO: No provider classes found.”,请建议我消除此问题。

控制台日志-:

May 31, 2014 10:23:27 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Reloading context [/rest]
May 31, 2014 10:23:27 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
  stk5
May 31, 2014 10:23:27 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
  class stk5.ConversionService
May 31, 2014 10:23:27 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
May 31, 2014 10:23:27 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.18 11/22/2013 01:21 AM'

我的 ConversionService.java 文件 -:

package stk5;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("ConversionService")


public class ConversionService{
     @GET
     @Path("/InchToFeet/{i}")
      @Produces(MediaType.TEXT_XML)
      public String convertInchToFeet(@PathParam("i") int i) {

        int inch=i;
        double feet = 0;
        feet =(double) inch/12;

        return "<InchToFeetService>"
        + "<Inch>" + inch + "</Inch>"
          + "<Feet>" + feet + "</Feet>"
         + "</InchToFeetService>";
      }

      @Path("/FeetToInch/{f}")
      @GET
      @Produces(MediaType.TEXT_XML)
      public String convertFeetToInch(@PathParam("f") int f) {
       int inch=0;
          int feet = f;
          inch = 12*feet;

          return "<FeetToInchService>"
            + "<Feet>" + feet + "</Feet>"
            + "<Inch>" + inch + "</Inch>"
            + "</FeetToInchService>";
      }
}

我的 Web.xml 文件 -:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>restApp</display-name>
  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>stk5</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app> 

【问题讨论】:

    标签: java json restful-url


    【解决方案1】:

    与其在web.xml 中提及 URL 模式,我建议您将其放在您的服务中 @Path

    您应该考虑您的上下文根,如果您没有设置它,那么默认情况下它是您的部署(war/ear/jar 等)名称。

    因此将您的&lt;url-pattern&gt;/rest/*&lt;/url-pattern&gt; 修改为&lt;url-pattern&gt;/*&lt;/url-pattern&gt;。现在您的 URL 应该看起来像这样 http://localhost:8080/[context root]/ConversionService/InchToFeet/2

    【讨论】:

    • 尝试使用localhost:8080/restApp/ConversionService/InchToFeet/2,但再次失败。上下文根包括 .xml 文件的显示名称?
    • 先生,在哪里设置上下文根
    • 我的控制台。 -> 2014 年 5 月 31 日下午 1:07:53 org.apache.catalina.startup.HostConfig checkResources INFO:重新加载上下文 [/rest] 2014 年 5 月 31 日下午 1:07:53 com.sun.jersey.api.core。 PackagesResourceConfig init INFO:扫描包中的根资源和提供程序类:stk5 May 31, 2014 1:07:54 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO:找到根资源类:类 stk5.ConversionService May 2014 年 3 月 31 日下午 1:07:54 com.sun.jersey.api.core.ScanningResourceConfig 初始化信息:未找到提供程序类。
    • 当然我可以帮你设置上下文根,但是你使用哪个应用服务器来部署你的服务?
    • 您是否将 URL 格式从 /rest/* 修改为 /* ?你的控制台仍然显示rest
    【解决方案2】:

    您要访问哪个 URL 来测试它?上下文是/rest,你的路径是/InchToFeet/{i},那么你要去/rest/InchToFeet/&lt;num&gt;吗?

    编辑:我还注意到你在课堂上有一个@Path("ConversionService")。这将使您的 URL /restConversionService/InchToFeet/&lt;num&gt;。您可能希望在 ConversionService 前面加上一个斜杠以使其成为 /rest/ConversionService/InchToFeet/&lt;num&gt;

    【讨论】:

    • 是的,本地主机:8080/restApp/rest/ConversionService/FeetToInch/2
    • 好的。 /rest 是上下文,而不是 /restApp,所以丢掉它的那一部分。此外,ConversionService 之前需要斜杠。请参阅上面的编辑。
    • 所以你的 URL 应该是 - localhost:8080/rest/ConversionService/InchToFeet/2 但 restApp 是 web.xml 文件下的显示名称。
    • 如果你检查你的控制台,你会看到Registered web context: /XXX。你能说出那是什么吗?
    • 我找不到那个。这是我的控制台
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多