处理对响应对象处理过程的封装
package com.struts2.demo; import com.struts2.demo.utils.AvailableSettings; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.ResponseHandler; import org.apache.http.client.fluent.Request; import org.apache.http.entity.ContentType; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; import java.io.IOException; /** * Handler that encapsulates the process of generating a response object from a HttpResponse. * Created by Frank on 2014/6/9. */ public class FluentResponseHandling { private static final Log logger = LogFactory.getLog(AvailableSettings.LOGNAME_TEST); public static void main(String[] args) { try { Document document = Request.Get("http://www.baidu.com").execute().handleResponse(new ResponseHandler<Document>() { @Override public Document handleResponse(HttpResponse response) { return getXmlDoc(response); } }); System.out.println(document.asXML()); } catch (IOException e) { logger.error("IOException:" + e.getMessage()); } } private static Document getXmlDoc(HttpResponse response) { StatusLine statusLine = response.getStatusLine(); HttpEntity httpEntity = response.getEntity(); if (statusLine.getStatusCode() >= 300) { logger.error("HttpResponseException,statusCode:" + statusLine.getStatusCode() + " reasonPhrase:" + statusLine.getReasonPhrase()); return null; } if (null == httpEntity) { logger.error("ClientProtocolException:Response contains no content"); return null; } ContentType contentType = ContentType.getOrDefault(httpEntity); if (!contentType.equals(ContentType.APPLICATION_XML)) { logger.error("Unexpected content type:" + contentType); return null; } SAXReader saxReader = new SAXReader(); saxReader.setEncoding(Consts.UTF_8.name()); saxReader.setValidation(false); try { return saxReader.read(httpEntity.getContent()); } catch (DocumentException | IOException e) { logger.error("axReader.read exception:" + e.getMessage()); return null; } } }
该博客介绍如何封装一个ResponseHandler来处理Http响应。通过Request.Get发送请求,并使用自定义的ResponseHandler转换HttpResponse为DOM4J的Document对象。示例中展示了错误处理和XML文档的读取。

1031

被折叠的 条评论
为什么被折叠?



