【问题标题】:Rest client logging for AndroidAnnotationsAndroidAnnotations 的 Rest 客户端日志记录
【发布时间】:2014-06-30 15:24:36
【问题描述】:
我正在尝试使用 AndroidAnnotation 的 REST 客户端来访问 Web 服务。我收到以下错误:
org.springframework.http.converter.HttpMessageNotReadableException:
Could not read JSON: Unexpected character ('f' (code 102)):
was expecting double-quote to start field name
如何让其余客户端记录它收到的实际响应?我无法想象为什么我的 Web 服务会返回此响应,但除非我能看到完整的响应,否则我无法调试它。我是否必须在 Spring 框架级别设置某种选项?
我还想查看我发送的请求的正文。
感谢您的帮助!
【问题讨论】:
-
其实我之前没有使用过 REST API,但我认为你可以按照 here 的建议使用 Interceptor 得到响应。
标签:
android
spring
web-services
rest
android-annotations
【解决方案1】:
Here 我们看到 AndroidAnnotations 是 Spring Android RestTemplate Module 的包装器。 RestTemplate 的代码是 here。所以我们可以找出哪个 TAG 用于日志记录:
private static final String TAG = "RestTemplate";
您看不到此 TAG 的日志条目吗?您使用的是哪种转换器/提取器?请发布调用堆栈。
在wiki 中,他们建议使用Interceptor 来记录请求/响应。因此,您可以实现自己的拦截器,例如:
public class LoggingInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] data, ClientHttpRequestExecution execution) throws IOException {
logRequest(request);
ClientHttpResponse response = execution.execute(request, data);
logResponse(response);
return response;
}
private void logRequest(HttpRequest request) {
// log it
}
private void logResponse(ClientHttpResponse response) {
// log it
}
}
您在@Rest 注释(字段interceptors)中启用拦截器。
【解决方案2】:
虽然我不使用AndroidAnnotations 并且无法直接回答您的问题,但我想提出一个替代解决方案。您可以使用一个很棒的小实用程序,称为 Fiddler。它可以为调试网络活动创造奇迹,无论是请求、响应、HTTP 标头还是在 REST API 通信中重要的任何其他内容。
您可以找到有关如何设置环境以使用 Fiddler here 的完整教程,但仅举几个关键步骤(信用转到链接页面,您还可以在那里找到有用的图片)
设置提琴手:
- 单击菜单工具 | Fiddler Options,然后选择 Connections 选项卡
- 记下“Fiddler 监听”端口(通常是 8888)
- 确保选中“允许远程计算机连接”复选框
- 切换到 HTTPS 选项卡
- 确保选中“捕获 HTTPS 连接”和“解密 HTTPS 流量”复选框
- 重启 Fiddler
- 记下 PC 的 IP 地址 关闭 Windows PC 上非必要的应用程序(以尽量减少通过 Fiddler 路由的网络流量)
设置您的设备:
- 点击设置,然后点击 Wi-Fi
- 找到您连接的网络(通常是列出的第一个网络),然后点击并按住
从弹出窗口中选择修改网络
- 向下滚动并启用“显示高级选项”
- 将“代理设置”更改为手动
- 在“代理主机名”下输入上面的 Windows PC IP 地址
- 在“代理端口”下从上方输入 Fiddler 端口(通常为 8888)
- 点击保存并等待网络重新连接
现在您将看到 REST API 调用所需的所有详细信息,这使调试变得更加容易。