【问题标题】: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 的完整教程,但仅举几个关键步骤(信用转到链接页面,您还可以在那里找到有用的图片)

    设置提琴​​手:

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

    设置您的设备:

    1. 点击设置,然后点击 Wi-Fi
    2. 找到您连接的网络(通常是列出的第一个网络),然后点击并按住 从弹出窗口中选择修改网络
    3. 向下滚动并启用“显示高级选项”
    4. 将“代理设置”更改为手动
    5. 在“代理主机名”下输入上面的 Windows PC IP 地址
    6. 在“代理端口”下从上方输入 Fiddler 端口(通常为 8888)
    7. 点击保存并等待网络重新连接

    现在您将看到 REST API 调用所需的所有详细信息,这使调试变得更加容易。

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 2013-11-11
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2011-07-07
      相关资源
      最近更新 更多