2014-11-01 3 views
0

Я создал метод, который перемещается вокруг и захватывает заголовки входящего запроса, а затем передает их объекту HttpPost, HttpGet и т. Д. В зависимости от того, какой метод запроса был :Общая реализация цели для HttpPost, HttpGet, HttpPut и т. Д.

protected HttpPost savePostData(HttpPost httpPost, HttpServletRequest servletRequest) throws UnsupportedEncodingException { 
    Enumeration<String> headerNames = servletRequest.getHeaderNames(); 
    while (headerNames.hasMoreElements()) { 

    String headerName = headerNames.nextElement(); 
    Enumeration<String> headers = servletRequest.getHeaders(headerName); 
    while (headers.hasMoreElements()) { 
     String headerValue = headers.nextElement(); 
     httpPost.addHeader(headerName, headerValue); 
    } 
} 
StringEntity requestBody = new StringEntity(servletRequest.getParameter(parameterBody)); 
httpPost.setEntity(requestBody); 
return httpPost; 

}

И

protected HttpPut savePutData(HttpPut httpPut, HttpServletRequest servletRequest) throws UnsupportedEncodingException { 
    Enumeration<String> headerNames = servletRequest.getHeaderNames(); 
    while (headerNames.hasMoreElements()) { 

    String headerName = headerNames.nextElement(); 
    Enumeration<String> headers = servletRequest.getHeaders(headerName); 
    while (headers.hasMoreElements()) { 
     String headerValue = headers.nextElement(); 
     httpPut.addHeader(headerName, headerValue); 
    } 
} 
StringEntity requestBody = new StringEntity(servletRequest.getParameter(parameterBody)); 
httpPut.setEntity(requestBody); 
return httpPut; 

}

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

ответ

0

Вы можете попробовать, например, HttpEntityEnclosingRequestBase - этот класс находится прямо над HttpPut и HttpPost в дереве наследования. Как я вижу, вы используете только методы addHeader() и setEntity(), класс, о котором я упоминал, также имеет «есть».

Прямая ссылка на документ: http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.html

+0

Это кажется полезным. Как я могу это сделать? Должен ли я отбрасывать при возврате HttpEntityEnclosingRequestBase желаемому типу объекта? – DarkKunai99

+0

Знайте, что это старый вопрос, но найти подходящее решение занимает время ... так, кто те, кто столкнулся с этим - используйте «HttpRequestBase» вместо «HttpEntityEnclosingRequestBase», – user5599807

Смежные вопросы