0

我一直在研究使用 HttpClient 4.1.x 在 Spring 下处理 RESTful 调用的应用程序系统。

虽然我在直接处理 httpclient 以及用作 RestTemplate 的传输方面都做得很好,但我发现我需要一些我不确定在执行中是否涵盖的东西。

“BasicResponseHandler”将内容响应视为字符串并返回它,前提是来自服务器的响应小于 300。我正在使用的 RESTful 系统提供 XML 文档作为错误响应的一部分(状态代码 >= 400 )。此 XML 响应包含一些可能对客户端开发人员有用的信息。

我想看看是否有人有任何通过 ResponseHandler 接口处理此问题的经验。本质上,BasicResponseHandler 将在状态 >= 300 的情况下抛出 ClientProtocolException。处理 AbstractHttpClient 实现将捕获该异常,静默消耗实体,然后重新抛出抛出的 IOException (ClientProtocolException)。

是否建议创建一个 ClientProtocolException 的子类来包含附加信息?

在错误状态的情况下,将任何现有文档解组为其各自的类型(如果可用),然后将其抛出,从而保留响应的内容。

还是我缺少另一种机制来处理这种情况?

4

1 回答 1

1

ResponseHandler接口的目的是使调用者能够消化 HTTP 响应,而无需在内存中缓冲消息内容。使用此接口的一个额外好处是不必担心由 HttpClient 自动处理的资源释放问题。

在您的特定情况下,您应该考虑从低级 HTTP 响应内容构建更高级别的域对象,而不是返回一个简单的、不具代表性的字符串。

因此,与其抛出异常,不如考虑向调用者返回一个对象,该对象由请求状态(成功、失败、部分响应等)和已解析的 XML 文档或表示消息内容的 JAXB 对象组成。

于 2013-01-16T11:45:25.540 回答