1

私が次のようなものを持っている場合:

@PUT
@Path("/login")
@Produces({"application/json", "text/plain"})
@Consumes("application/json")
public String login(@FormParam("login") String login, @FormParam("password") String password) throws Exception
{
    String response = null;
    response = new UserManager().login(login, password);
    return response;
}

(コンテンツフィールドに)RESTサービスをテストするために両方のパラメーターを入力するにはどうすればよいですか?次のようなものではありません:

{"login":"xxxxx","password":"xxxxx"}

ありがとう

4

1 に答える 1

1

フォームパラメータデータは、...フォームデータを送信するときにのみ存在します。@Consumesリソースのタイプをに変更しますmultipart/form-data

@PUT
@Path("/login")
@Produces({ "application/json", "text/plain" })
@Consumes("multipart/form-data")
public String login(@FormParam("login") String login,
        @FormParam("password") String password) {
    String response = null;
    response = new UserManager().login(login, password);
    return response;
}

次に、クライアント側で次のように設定します。

  • コンテンツタイプ:multipart / form-data
  • loginおよびのフォーム変数を追加しますpassword

ちなみに、これが学習用ではないと仮定すると、ログインエンドポイントをSSLで保護し、パスワードをハッシュしてからネットワークに送信することをお勧めします。


編集

あなたのコメントに基づいて、必要なフォームデータを使用してクライアントリクエストを送信する例を含めます。

try {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost post = new HttpPost(BASE_URI + "/services/users/login");

    // Setup form data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("login", "blive1"));
    nameValuePairs.add(new BasicNameValuePair("password",
            "d30a62033c24df68bb091a958a68a169"));
    post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    // Execute request
    HttpResponse response = httpclient.execute(post);

    // Check response status and read data
    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        String data = EntityUtils.toString(response.getEntity());
    }
} catch (Exception e) {
    System.out.println(e);
}
于 2013-03-21T10:52:41.217 に答える