当前位置: 首页 > 知识库问答 >
问题:

改进回调获取响应正文

洪华皓
2023-03-14

我正在测试改进,以与凌空比较,我很难得到我的请求的回应。例如,我做这样的事情:

RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint("http://localhost:8080")
            .build();

MyService service = restAdapter.create(MyService.class);
service.getToto("toto", new Callback<Toto>() {

        @Override
        public void success(Toto toto, Response response) {
            // Try to get response body
            BufferedReader reader = null;
            StringBuilder sb = new StringBuilder();
            try {
                reader = new BufferedReader(
                    new InputStreamReader(response.getBody().in()));
                String line;
                try {
                    while ((line = reader.readLine()) != null) {
                        sb.append(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            String result = sb.toString();
        }

        @Override
        public void failure(RetrofitError error) {}
    });

它工作了,对象< code>toto被设置,但是出于测试目的,我还想显示服务器返回的JSON响应。

所以我正试图从react.getBody()读取InputStream,这是一个TypedInputStream。不幸的是,我总是得到一个IOException:流被关闭了。

我尝试使用Retrofit中的Utils类,但我得到了相同的IOException错误。

共有3个答案

劳夕
2023-03-14

如果您设置了< code >。setLogLevel(RestAdapter。LogLevel.FULL)在用于创建服务的< code>RestAdapter上,您应该在调试控制台中获得原始的JSON响应输出。

RestAdapter restAdapter = new RestAdapter.Builder()
    .setServer("http://my_lovely_api.com")
    .setLogLevel(RestAdapter.LogLevel.FULL)
    .build();

mService = restAdapter.create(MyService.class);

如果您想对这个原始响应做一些不同的事情,您仍然可以使用成功块中的代码来创建JSON字符串,假设您保持<code>日志级别。在<code>setLogLevel</code>方法中使用FULL,如果没有,则它不会解析<code>response.getBody()中的输入流。in(),因为它已经被读取和关闭。

胥康安
2023-03-14

改造2.0之前

   String bodyString = new String(((TypedByteArray) response.getBody()).getBytes());

改造2.0

 String  bodyString = new String(response.body().bytes());
皇甫飞宇
2023-03-14

在回调的尖括号内写上“响应”,然后从此响应中提取流。

service.getToto("toto", new Callback<Response>() {
    @Override
    public void success(Response result, Response response) {

        //Try to get response body
        BufferedReader reader = null;
        StringBuilder sb = new StringBuilder();
        try {

            reader = new BufferedReader(new InputStreamReader(result.getBody().in()));

            String line;

            try {
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


        String result = sb.toString();
    }

    @Override
    public void failure(RetrofitError error) {

    }
});
 类似资料:
  • 我使用拦截器设置请求的头,如下所示: 并且一切按预期工作(服务器看到并接受)。 我的问题是,当响应到来时,我想在我的应用程序中读取这些标题。 我使用,但总是返回一个空的String[]。所有其他属性(url、params、verb)都可以访问,只有标头丢失了。 我在请求头中设置了一个键,基本上我想在收到响应时检查这个键。 有没有线索为什么标头不可见以及如何在中获取它们?

  • 问题内容: jQuery的AJAX错误函数具有以下参数: 跨浏览器获取响应主体的最佳方法是什么? 这行得通吗(可靠地在所有浏览器中)? 问题答案: 有一个隐藏的函数可以从XHR等距提取数据: 如果您将其作为第二个参数传递,它将把响应视为JSON字符串。 请注意,由于没有响应(例如网络问题),您可能会收到错误消息。确保您也涵盖了这种情况。另外,我相信(不确定)如果服务器返回或状态,则jQuery会调

  • 我试图在onFailure(ReformationError error)中获取错误响应正文,但获取的是null。 我正在使用标题“Accept:text/plain”(接受:text/plain)(接收请求)和“response”(响应),如果我设置日志级别,则可以将正文视为文本。完整。此外,<代码>错误。getResponse()。getStatus()为我提供正确的状态代码。 但是当我执行或

  • 是否可以使用改型库只累加字符串响应?我有一种情况,我需要在我的链接上添加查询,以便该链接看起来像:localhost//register?handle=someid SomeID是整数,当我这样做时,我将从服务器收到由20个字符组成的字符串格式的响应。我怎样才能得到那个回应?改型甚至可以处理不是Json格式的响应吗?

  • 我正在尝试使用WireMock创建动态模拟。我有一种情况,如果我指定如下URL: 那么我应该会收到如下响应: 简而言之,路径参数在响应正文中返回。我可以通过使用设置为urlPath模式使请求URL通用。但是,我不确定应该如何捕获abc@abc.com并使用正则表达式在响应中返回此值。