0

私は、Jersey を使用して安らかな Web サービスを実装することを学んでいます。私はいつも「POST

http://localhost:8080/rest/welcome/post 

404 Not Found の応答ステータスが返されました" - 以下のコードの何が問題なのですか? サーバー側のコンテキスト ルートは残りであり、クラス レベルで @Path を歓迎し、メソッド レベルで @pPath を投稿します。

クライアント

public class WelcomeRestJsonClient {

    @Produces("application/json")
    @Consumes("text/plain")
    public void send() {
        MyObject myObject = new MyObject();

        ClientConfig clientConfig = new DefaultClientConfig();
        clientConfig.getClasses().add(com.restclient.MyJsonProvider.class);
        Client client = Client.create(clientConfig);
        WebResource webResource = client.resource("http://localhost:8080/rest/welcome/post");
        ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, myObject);
        System.out.println("success");
    }
}

サーバ

@Path("/welcome")
public class WelcomeRestJson {

    @POST
    @Path("/post")
    @Produces("text/plain")
    @Consumes("application/json")

    public String processPostData(MyObject myObject) {
        System.out.println("Inside processPostData");
        return "success";
    }
 }

JsonProvider の構成が正しくないために、この問題に直面していますか? クライアント側では、JacksonJaxbJsonProvider を拡張して MyObject を Json に変換する MyJsonProvider を使用しています。サーバー側の私のコードは、単に MyObject を受け入れます。サーバー側でも Json プロバイダーを接続するためのコードが必要ですか?

これが私のweb.xmlです

<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>com.rest</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>

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

残りの index.html にアクセスできます。ログファイルに次のように表示されます。情報: ルート リソース クラスが見つかりました: クラス com.rest.WelcomeRestJson パスから "/" を削除しました。それでも同じ 404 エラーです。助けてください。

4

3 に答える 3

1

Jersey Servlet を に追加した後web.xml、パラメータなしで get が機能するようになりました。しかし、投稿はまだ失敗しました。次の init パラメータを Jersey Servlet に追加し、Jersey Servlet マッピングを から/rest/*に置き換えると/*、問題が修正されました。

<init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
</init-param>
于 2012-06-13T22:06:33.790 に答える
0
  • パス()アノテーションでは、書き込みと。@Path("/welcome")の代わりにスラッシュ(/)を使用しないでください。@Path("welcome")@Path("post")

  • post予約キーワードになる可能性があるため、サービス名は使用しないことをお勧めします。使用後などの代わりに@Path("test")

  • Firefoxプラグインのポスターを使用してサービスステータスをテストし、サービス側ですべてが正常であることを確認します。404エラーです。jsonエラーとは関係ありません。SimplyYourserviceはで利用できませんhttp://localhost:8080/rest/welcome/post。それはコードではなく、構成についてです。

  • あなたはまで到達することができますhttp://localhost:8080/rest/か?
于 2012-06-13T08:01:44.353 に答える
0

1) リソースを登録していないようです。Jersey の自動スキャンに依存していますか? 一部の環境では正しく動作しない場合があります。javax.ws.rs.core.Application標準の JAX-RS の方法であるため、クラスを使用することをお勧めします。

2) プロバイダーも登録する必要があります。javax.ws.rs.core.Application標準の JAX-RS の方法であるため、クラスを使用することをお勧めします。

2.1) いずれにせよ、プロバイダを登録していないからといって 404 が返されるわけではありません。実際にどのようなエラー コードが表示されるかは覚えていませんが、おそらく 500 になるでしょう。

3) 強くお勧めします: Jetty のログを確認してください。登録されているすべてのリソースとプロバイダー (デフォルトとカスタムを含む) のリストを含む多くの情報を出力します。

于 2012-06-13T13:57:26.057 に答える