59

Java メソッドで、Jersey クライアント オブジェクトを使用して RESTful Web サービス (Jersey を使用して記述) で POST 操作を実行したいのですが、クライアントを使用して FormParam として使用される値を送信する方法がわかりません。サーバー上。クエリ パラメータを問題なく送信できます。

4

6 に答える 6

87

私自身はまだこれを行っていませんが、Google-Fuを少し紹介すると、blogs.oracle.comで、あなたが求めているものの正確な例を示す技術的なヒントが明らかになります。

ブログ投稿からの例:

MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
ClientResponse response = webResource
    .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
    .post(ClientResponse.class, formData);

それは何か助けになりますか?

于 2010-01-25T22:30:58.413 に答える
53

Jersey 2.x 以降、MultivaluedMapImplクラスは に置き換えられましたMultivaluedHashMap。これを使用して、フォーム データを追加し、サーバーに送信できます。

    WebTarget webTarget = client.target("http://www.example.com/some/resource");
    MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
    formData.add("key1", "value1");
    formData.add("key2", "value2");
    Response response = webTarget.request().post(Entity.form(formData));

フォーム エンティティは の形式で送信されることに注意してください"application/x-www-form-urlencoded"

于 2014-08-07T01:43:48.143 に答える
18

これは、Jersey Client ドキュメントの最初の例です。

例 5.1。フォーム パラメータを使用した POST リクエスト

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:9998").path("resource");

Form form = new Form();
form.param("x", "foo");
form.param("y", "bar");

MyJAXBBean bean =
target.request(MediaType.APPLICATION_JSON_TYPE)
    .post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE),
        MyJAXBBean.class);
于 2015-03-18T07:01:09.997 に答える
6

ファイルのアップロードが必要な場合は、MediaType.MULTIPART_FORM_DATA_TYPE を使用する必要があります。MultivaluedMap を使用できないように見えるので、FormDataMultiPart を使用したソリューションを次に示します。

InputStream stream = getClass().getClassLoader().getResourceAsStream(fileNameToUpload);

FormDataMultiPart part = new FormDataMultiPart();
part.field("String_key", "String_value");
part.field("fileToUpload", stream, MediaType.TEXT_PLAIN_TYPE);
String response = WebResource.type(MediaType.MULTIPART_FORM_DATA_TYPE).post(String.class, part);
于 2014-06-05T06:34:40.210 に答える
2

また、これを試すことができます:

MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
webResource.path("yourJerseysPathPost").queryParams(formData).post();
于 2013-03-07T23:07:51.787 に答える