1

私はこの方法を持っています:

@GET
@Path("/myservice")
@Produces(MediaType.APPLICATION_JSON)
public Response mysercice() {

   boolean userExists = false;
   CacheControl cacheControl = new CacheControl();
   cacheControl.setNoCache(true);
   cacheControl.setNoStore(true);

   JSONObject jsonObject = new JSONObject();
   jsonObject.put("userExists", userExists);
   return Response.ok(jsonObject, MediaType.APPLICATION_JSON).cacheControl(cacheControl).build();

}

ブラウザでメソッドのURLにアクセスすると、{}が表示されます。これは、オブジェクトが空であることを意味します。だから、私は使用しようとしました:

return Response.ok(jsonObject.toString(), MediaType.APPLICATION_JSON).cacheControl(cacheControl).build();

したがって、ブラウザに{"userExists":false} が表示されますが、JSONObjectを返すだけで、ブラウザに空のオブジェクトが表示される理由がわかりませんでした。

4

1 に答える 1

2

ほとんどの JAX-RS 実装には、応答エンティティを JSON にマッピングするためのプロバイダーが付属しています。だからあなたが書くとき:

return Response.ok(jsonObject, MediaType.APPLICATION_JSON).build();

基本的に、JAX-RS プロバイダーがJSONObjectを JSON にマーシャリングするように要求しています。唯一の問題は、JSONObjectこの方法でシリアル化することを実際には意図していないことです。代わりに、JSON 表現を段階的に構築し、その表現を JSON 文字列値に変換するために使用することを意図しています。次の 2 つのオプションがあります。

  1. クライアントに送り返すすべてのフィールドを含む POJO を作成します。メソッドでこの POJO を返すと、自動的に JSON に変換されます (`return Response.ok(myPojo, MediaType.APPLICATION_JSON).build()

  2. JSONデータを文字列として直接返します(これは、動作する例ですでに行っています)。

于 2013-02-18T16:57:51.283 に答える