0

Jersey REST を使用して構築された Web サービスに JSON を送信する際に問題が発生しました。データがサーバーに到着しないようです。

全体的なタスク フローは次のようになります。

Javascript POST JSON -> ウェブサーバー -> ウェブサーバーが JSON を取得して出力

JSON データをサーバーに POST することになっている Javascript を次に示します。パスは次の/posttestとおりです。

<script type="text/javascript">
$(function() {
    var name = "Tony";
    $.post(
            '/posttest',

            function (data) {
                alert("sune " + data.name);
            });
})
 </script>

これらすべてのクラスを実行する Web サーバー (Grizzly) があります。

このクラスは、JAX-RS API を使用して、JSON データを使用する POST 要求を処理します。

@Path("/posttest")
public class PostTest {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response doPost(StatusBean b) {
    System.out.println("---> " + b.getName());
    StatusBean statusBean = new StatusBean();
    return Response.status(Response.Status.ACCEPTED).entity(statusBean).build();
}

データがシリアル化される Bean の定義は次のとおりです。

@XmlRootElement
public class StatusBean {
   private String name;

   public StatusBean() {
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name= name;
   }
}

コンソールにデータを出力するテスト クライアント クラスを次に示します。

ClientConfig cc = new DefaultClientConfig();
Client c = Client.create(cc);
WebResource r = c.resource("http://localhost:9998/posttest");
StatusBean post = r.type(MediaType.APPLICATION_JSON_TYPE).post(StatusBean.class, new StatusBean());
System.out.println("--> " + post.getName());
4

2 に答える 2

0

私は resteasy の経験しかなく、jersey の経験はありませんが、JAX-RS 標準に頼ろうとします。

このようなエラーが発生した場合は、常に HTTP 応答をより詳細に調査する必要があります。ブラウザでネットワーク モニタを開き、HTTP 応答コードを確認します。送信された JSON と StatusBean Java オブジェクトが一致しないため、405 が返されると思います。Java Bean には「dat」プロパティがあり、JSON には「name」プロパティがあります。

また、javascript と同じように Java オブジェクトを直接シリアライズしていることを確認してください。これは、jackson シリアライザーを使用して実現できます。これを使用するには、クラスパスに含めるだけです。Usgin maven これは次のようになります。

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.8</version>
</dependency>

このリンクが役に立つかもしれません: http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/

于 2012-04-19T12:04:00.050 に答える
0

StatusBeanにはname、 dat ではなく という名前のフィールドが必要です - と一致している必要があり{"name":"Tony"}ます。

ところで。RESTEasy サーブレットの REST リソース マッピングは何ですか? 上記の設定では、 である必要があります/*

于 2012-04-19T11:36:41.493 に答える