为AndroidAnnotations休息客户端日志记录

时间:2014-06-30 15:24:36

标签: android spring web-services rest android-annotations

我正在尝试使用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

如何让其余客户端记录收到的实际响应?我无法想象为什么我的网络服务会返回此响应,但我无法调试它,除非我能看到完整的响应。我是否必须在Spring框架级别设置某种选项?

我还希望看到我发送的请求的正文。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

Here我们看到AndroidAnnotations是Spring Android RestTemplate模块的包装器。 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)中启用拦截器。

答案 1 :(得分:0)

虽然我不使用AndroidAnnotations并且无法直接回答您的问题,但我想提出另一种解决方案。您可以使用一个名为Fiddler的小实用程序。它可以为调试网络活动创造奇迹,无论是请求,响应,HTTP标头还是几乎任何在REST API通信中都很重要的事情。

您可以找到有关如何设置环境以使用Fiddler here的完整教程,但请列出几个关键步骤(信用转到链接页面,您还可以在那里找到有用的图片)

设置Fiddler:

  1. 点击菜单工具| Fiddler选项,然后选择“连接”选项卡
  2. 记下“Fiddler侦听”端口(通常是8888)
  3. 确保选中“允许远程计算机连接”复选框
  4. 切换到HTTPS标签
  5. 确保选中“捕获HTTPS连接”和“解密HTTPS流量”复选框
  6. 重启Fiddler
  7. 记下PC的IP地址关闭Windows PC上的非必要应用程序(以尽量减少通过Fiddler路由的网络流量)
  8. 设置您的设备:

    1. 点按“设置”,然后点按“Wi-Fi”
    2. 找到您所连接的网络(通常是列出的第一个网络),然后点按并按住 从弹出窗口中选择“修改网络”
    3. 向下滚动并启用“显示高级选项”
    4. 将“代理设置”更改为手动
    5. 在“代理主机名”下,输入上面的Windows PC IP地址
    6. 在“代理端口”下,从上面输入Fiddler端口(通常为8888)
    7. 点击保存并等待网络重新连接
    8. 现在,您将看到REST API调用所需的所有详细信息,这使调试变得更加容易。

相关问题