Javaメソッドでは、Jerseyクライアントオブジェクトを使用して、POST RESTful Webサービス(Jerseyを使用して記述された)でも操作を行いたい)クライアントを使用して、サーバー上でFormParamとして使用される値を送信する方法がわからないので、クエリパラメータを問題なく送信できます。
私自身はまだこれを行っていませんが、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);
その助け?
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"
の形式で送信されることに注意してください。
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);
ファイルのアップロードが必要な場合は、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);
最も単純な:
Form form = new Form();
form.add("id", "1");
form.add("name", "supercobra");
ClientResponse response = webResource
.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
.post(ClientResponse.class, form);
また、これを試すことができます:
MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
webResource.path("yourJerseysPathPost").queryParams(formData).post();