2

2 つの異なるオブジェクトを受け入れる Restful Web サービス API を作成しました。Jersey クライアントを使用してこの API を呼び出すことは可能ですか。Jersey クライアントを使用してこれを呼び出すことができません。メソッドに複数のオブジェクトを渡すことができないというのは、Rest API の制限ですか。

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/hello")
public class TimePassService {

    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response saveEmployeeInfo(final Employee input,final Manager input1) {
        String result = "Employee saved : " + input;

        System.out.println(input);
        System.out.println(input1);
        return Response.status(201).entity(result).build();
    }

}

これについて何人かの技術者と話し合ったところ、彼らはそれは不可能だと答えました。解決策は、これら 2 つのオブジェクトを 3 番目のオブジェクトにラップしてから、単一のオブジェクトを渡すことです。

これの他の解決策があれば教えてください。

4

2 に答える 2

6

それは不可能です。JAX-RS 仕様を参照してください。

3.3.2.1 エンティティ パラメータ

@FormParamエンティティ パラメータと呼ばれる、セクション 3.2 にリストされているアノテーションまたはいずれかのアノテーションが付けられていないパラメータの値は、リクエスト エンティティ ボディからマッピングされます。エンティティ本体と Java 型の間の変換は、エンティティ プロバイダの責任です。セクション 4.2 を参照してください。リソース メソッドには、最大で 1 つのエンティティ パラメーターが必要です。

メソッド「エンティティ パラメータ」は1 つしか存在できません。

あなたが求めるものはRESTfulではありません。REST は RPC (リモート プロシージャ コール) ではありません。オブジェクトを「メソッド」に「渡す」ことはありません。REST では、識別 URL との間でリソース表現を転送します。

あなたの例では、リソースはEmployeeInfoラッピングEmployeeManager.

その上、/postあまり RESTful な URL ではありません。これによって識別されるリソースは何ですか? あなたの場合はどうなりますGET /postか?RPC ではなく、REST の観点から考えてください。

于 2013-10-03T15:23:25.470 に答える
2

解決策は、これら 2 つのオブジェクトを 3 番目のオブジェクトにラップしてから、単一のオブジェクトを渡すことです。クライアントから投稿された文字列 json はどのように見えるのだろうか?

これですか :

[
    employee: {
        "name": "Sury",
        "age": 23
    },
    manager: {
        "name": "Beack",
        "Room": "DC2"
    }
]
于 2015-01-05T09:45:22.660 に答える