web-dev-qa-db-ja.com

404を返すREST Webサービス

Eclipseを使用するのはこれが初めてで、私は多くの怒りを引き起こしています。

Tomcat 6.0をインストールし、Jerseyライブラリをダウンロードして、次のチュートリアルを実行しました。 http://www.vogella.com/articles/REST/article.html#first_client

私はRestExampleとしてプロジェクト名を作成し、その中にパッケージde.jay.jersey.firstがあり、その中にHelloWorldResourceクラスがあり、次のようになります。

package de.jay.jersey.first;

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

@Path("/hello")
public class HelloWorldResource {
// This method is called if TEXT_PLAIN is request
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
    return "Hello Jersey";
}

// This method is called if XML is request
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
    return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}

// This method is called if HTML is request
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello() {
    return "<html> " + "<title>" + "Hello Jersey" + "</title>"
            + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
}
}

そして私の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>RestExample</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>de.jay.jersey.first</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>

と私はカールを次のように使用しようとしています:

curl http:// localhost:8081/RestExample/rest/hello

Apache Tomcat/6.0.35-エラーレポート

HTTPステータス404-/ RestExample/rest/Hello

タイプ ステータスレポート

メッセージ/RestExample/rest/hello

説明 要求されたリソース(/ RestExample/rest/hello)は利用できません。

問題は、そのリソースにアクセスできるように、web.xmlで何を変更する必要があるかです。

RestExample/de.jay.jersey.first/rest/helloを試しましたが、それでも機能しませんでした。 Tomcatはエラーなしで実行されています。

11
roymustang86

私はTomcat 7.0でそれを試しました、そしてそれはうまく働きます:

package de.jay.jersey.first;

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

@Path("/hello")
public class HelloWorldResource {
// This method is called if TEXT_PLAIN is request
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayPlainTextHello() {
        return "Hello Jersey";
    }

// This method is called if XML is request
    @GET
    @Produces(MediaType.TEXT_XML)
    public String sayXMLHello() {
        return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
    }

// This method is called if HTML is request
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHtmlHello() {
        return "<html> " + "<title>" + "Hello Jersey" + "</title>"
                + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>RestExample</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>de.jay.jersey.first</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>

http:// localhost:8084/RestExample/rest/hello にアクセスすると、問題なく動作します

1
DaTroop

Web全体で解決策を探しているにもかかわらず、なぜうまくいかないのかを理解するのに長い時間がかかりました。私が犯した間違いは、パッケージ名が新しいジャージーAPIに対して最新のものではなかったことです。更新されたパッケージ名は次のようになります(Web.xml)。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>RestExample</display-name>
    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>de.jay.jersey.first</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>

<servlet-class>および<param-name>はvogellaとは異なります(更新されます) tutorial 。この特定の質問に対する答えではないかもしれませんが、誰かを助けるかもしれません。 こちら から見つけました。

13
gndps

プロジェクトに指定されたすべてのjarを追加してください

プロジェクト(右クリック)>プロパティ> Javaビルドパス>ライブラリ> JARの追加/外部JARの追加

  1. asm-3.1.jar
  2. jersey-bundle-1.14.jar
  3. jersey-client.jar
  4. jersey-core.1.17.1.jar
  5. jersey-server-1.17.jar
  6. jersey-servlet-1.17.jar
2
saurabh

パスにこのバー「/」の例があるかどうかを確認してください:@Path( '/ path')場合によっては、この問題は足りないバーだけです!

1

私も何時間も同じ問題の解決策を探しました。

これは私の問題を解決しました:

maven-Project(たとえば、archetype maven-archetype-webapp)を使用し、クラスHelloWorldResourceがフォルダーに実装されている場合src/main/resourcesこのクラスはコンパイルされません(たとえば、次にEclipseで「mvn clean package」または「run on server」を実行)

HelloWorldResourceをフォルダーに実装src/main/Java代わりに404は発生しません。(maven-archetype-webappでMaven-Projectを作成する場合、フォルダーは手動で作成する必要があります)

1
Celle

代わりにJersey 2.XXユーザーServletAdaptorを使用している場合。このような、

    <servlet-class>com.Sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
    <!-- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> -->
0
whiz