2013-03-21 3 views
1

Если у меня есть что-то вроде:PUT с @FormParam

@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"} 

Благодаря

ответ

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; 
} 

Тогда на вашей стороне клиента, установите:

  • Content-Type: многокомпонентные/форма-данные
  • Добавить переменные формы для login и password

На стороне записки , предполагая, что это не для обучения, вы захотите защитить свою конечную точку входа с помощью SSL и хешировать пароль перед отправкой через провод.


EDIT

Основываясь на ваш комментарий, я в том числе пример отправки запроса клиента с необходимой формы данных:

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); 
} 
+0

Что-то вроде: 'HttpPut httpPut = new HttpPut (BASE_URI + "/services.users/login"); ' ' Форма f = новая форма(); f.add ("login", "xxxxx"); f.add ("password", "xxxxx"); '?? – user2144555

+0

@ user2144555 - См. Изменения для жизнеспособного способа вызова ресурса сервера с использованием Apache HttpComponents. – Perception

+0

Я тоже использовал Apache HttpClient. Но я думал, что «** переменные формы для входа и пароля **» были отправлены по-другому. Я попробую! – user2144555