web-dev-qa-db-ja.com

Java restful serviceでjsonパラメーターを使用する方法

Webサービスでjsonパラメータを使用するにはどうすればよいですか?@PathParamを使用してパラメータを取得できますが、パラメータとしてjsonデータを取得するには何もする手がかりがありません。

@GET
@Path("/GetHrMsg/json_data")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces(MediaType.APPLICATION_JSON)
public String gethrmessage(@PathParam("emp_id") String empid) {

}

@PathParamの代わりに使用するものと、後で解析する方法。

12
Vivek Singh

リクエストで送信されたJSONメッセージ本文の消費について話していると思います。

その場合、完全に禁止されているわけではありませんが、GETリクエストにはnotリクエスト本文が必要であるという一般的なコンセンサスがあります。理由の説明については、「 HTTP GET with request body 」の質問を参照してください。

あなたの例がGETリクエストを示しているため、これについてのみ言及します。 POSTまたはPUTを実行している場合、読み続けてください。ただし、プロジェクトで実際にGETリクエストを実行している場合は、代わりに kondu's solution


そうは言っても、JSONまたはXMLメッセージ本文を消費するには、それ自体がメッセージを表すJAXB Beanである(注釈のない)メソッドパラメーターを含めます。

したがって、メッセージ本文が次のようになっている場合:

{"hello":"world","foo":"bar","count":123}

次に、次のような対応するクラスを作成します。

@XmlRootElement
public class RequestBody {
    @XmlElement String hello;
    @XmlElement String foo;
    @XmlElement Integer count;
}

そして、サービスメソッドは次のようになります。

@POST
@Path("/GetHrMsg/json_data")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public void gethrmessage(RequestBody requestBody) {
    System.out.println(requestBody.hello);
    System.out.println(requestBody.foo);
    System.out.println(requestBody.count);
}

出力されるもの:

world
bar
123

JAXBを使用してさまざまな種類のHTTPデータを使用する方法の詳細については、「 RESTfulでパラメーターにアクセスする方法POSTメソッド 」を確認することをお勧めします、素晴らしい情報があります。

15
bertag

BertagはGETのコメントについて正しいです。ただし、jsonデータを消費するPOST要求を行う場合は、以下のコードを参照できます。

        @POST
        @Path("/GetHrMsg/json_data")
        @Consumes(MediaType.APPLICATION_JSON)
        public Response gethrmessage(InputStream incomingData) {
            StringBuilder crunchifyBuilder = new StringBuilder();
            try {
                BufferedReader in = new BufferedReader(new InputStreamReader(incomingData));
                String line = null;
                while ((line = in.readLine()) != null) {
                    crunchifyBuilder.append(line);
                }
            } catch (Exception e) {
                System.out.println("Error Parsing: - ");
            }
            System.out.println("Data Received: " + crunchifyBuilder.toString());

            // return HTTP response 200 in case of success
            return Response.status(200).entity(crunchifyBuilder.toString()).build();
        }

参照してください ここをクリック

6
Young Emil

_@PathParam_は、URLの一部をパラメーターとして一致させるために使用されます。たとえば、フォーム_http:/example.com/books/{bookid}_のURLでは、@PathParam("bookid")を使用して、ブックのIDをメソッドに取得できます。

_@QueryParam_は、URLのクエリ文字列(?の後の部分)のキー/値のペアにアクセスするために使用されます。たとえば、URL _http:/example.com?bookid=1_では、@QueryParam("bookid")を使用して `bookidの値を取得できます。

これらは両方とも、リクエストURLにパラメーターに関する情報が含まれている場合に使用され、メソッドでデータを直接使用できます。

この投稿が役に立たない場合は、問題を詳細に指定してください。

4
kondu