Передача параметров и заголовков с помощью Apache HttpDelete для веб-службы Rest Android

У меня есть конечная точка метода HTTP DELETE. Я хочу передать некоторые заголовки, в частности Content-Type=application/x-www-form-urlencoded. Также есть некоторые параметры, на основании которых на стороне сервера будет решаться, какую запись следует удалить. И реализация сервера мне недоступна.

Я использую HTTP-клиент apache. Мой метод для HTTP DELETE выглядит следующим образом:

private String doDelete(String url, Map<String,String> params, Map<String,String> headerMap){

    HttpClient httpClient = new DefaultHttpClient(httpParams);
    HttpDelete httpDelete = new HttpDelete(httpRequestWrapper.getUrl());

    if(headerMap != null){
        for(String headerName : headerMap.keySet()){
            httpDelete.addHeader(headerName, headerMap.get(headerName));
        }
    }
    
    if(params != null){         
        for(String paramName : params.keySet()){
            httpParams.setParameter(paramName, params.get(paramName));
        }
        httpDelete.setParams(httpParams);
    }
    
    HttpResponse httpResponse = httpClient.execute(httpDelete);
    HttpEntity httpEntity = httpResponse.getEntity();
    String responseStr = getASCIIContentFromEntity(httpEntity);
    return responseStr; 
}

Проблема в том, что я вижу (в режиме отладки), что параметры правильно передаются в запросе на удаление с моей стороны. Но на стороне сервера параметры получаются пустыми. Есть ли способ успешно передать параметры и заголовки?

Любая помощь приветствуется.


person hemu    schedule 02.05.2013    source источник


Ответы (1)


Дословная передача заголовков может вызвать проблемы.

Имея в виду вышеизложенное, имейте в виду, что реализованный метод HttpDelete не принимает тело, поэтому наличие этого конкретного заголовка Content-Type, связанного с вашим запросом, может вызвать помехи, вводящие в заблуждение контейнер.

Попробуйте исключить из клиента заголовок, содержащий Content-Type, и посмотрите, решит ли это вашу проблему.

ИЗМЕНИТЬ АХ!! Нашел проблему! Метод setParams сбивает с толку. Согласно документации от HTTP Client 4.x

Предоставляет параметры, которые будут использоваться для обработки этого сообщения.

Параметры, которые вы устанавливаете в своем коде, не будут переданы, поскольку они передаются базовому клиенту, выполняющему запрос.

Эта статья SO определяет соответствующий подход для что вы пытаетесь.

person Dave G    schedule 24.06.2013