【问题标题】:Json response from retrofit+jackson convertor来自改造+杰克逊转换器的 Json 响应
【发布时间】:2015-06-07 18:39:42
【问题描述】:

我想知道在成功响应时是否可以将响应正文作为字符串访问。在这里我得到了成功:

   serviceOne.editionsGet(Device, new Callback<Editions>() {
            @Override
            public void success(Editions editions, Response response) {
               //here i get my results
            }

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

我想它可以是在 body 中的 body 响应。如果是如何从中获取字符串体。

【问题讨论】:

    标签: android jackson retrofit


    【解决方案1】:
    InputStream is = response.getBody().in();
    
    BufferedReader br = null;
    StringBuilder sb = new StringBuilder();
    
    String line;
    try {
    
        br = new BufferedReader(new InputStreamReader(is));
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
    
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    String body = sb.toString()
    

    【讨论】:

    • 使用上面的代码,我使用了 Google Guava v11.0,下一个代码 InputStream is = null;尝试 {is = response.getBody().in();} catch (IOException e) { e.printStackTrace(); } 尝试 { String text = CharStreams.toString(CharStreams.newReaderSupplier((InputSupplier extends InputStream>) is, Charsets.UTF_8)); } catch (IOException e) {e.printStackTrace();} 尝试 {is.close();} catch (IOException e) { e.printStackTrace();它给了我下一个错误 ClassCastException:java.io.ByteArrayInputStream cannot be cast to com.google.common.io.InputSupplier
    • 糟糕。以为您可以使用番石榴进行施法。更新答案以仅使用标准缓冲阅读器。
    【解决方案2】:

    它应该可以通过response.getBody().toString() 访问。

    editions应该是retrofit返回的Object,你自己实现

    response应该是retrofit返回的响应体,包含响应体,可以使用getBody().toString()方法作为String访问。

    【讨论】:

    • TypedByteArray[length=287494] 是 response.getBody().toString() 的结果,但我需要 json 作为字符串
    【解决方案3】:

    使用 JSONNode 你可以得到 json 作为响应

      ApiInterface apiService =
                ApiClient.getClient().create(ApiInterface.class);
        Call<JsonNode> call = apiService.setDevice("application/json","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRoX3Rva2VuIjoiMjY5NTUzNzIyOSIsImxvZ2luX2lkIjoiUlY1OTk3In0.NnPNRVUgaQnRBiza9yXM8FJf069Hb2ROtFw2mdlqK3w",rawJsonData());
    
        call.enqueue(new Callback<JsonNode>() {
            @Override
            public void onResponse(Call<JsonNode>call, Response<JsonNode > response) {
                Log.e("MAIN",response.body().toString());
              /*  Model model=response.body();
                model.getstatus();*/
            }
    
            @Override
            public void onFailure(Call<JsonNode>call, Throwable t) {
    
                // Log error here since request failed
                Log.e("MAIN", t.toString());
    
            }
        });
    

    就用这个

     @POST("device")
    Call<JsonNode> setDevice(@Header("Content-Type") String content_type, @Body Device parm);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2015-01-12
      • 2019-05-18
      • 2012-11-15
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多