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

改造2.0如何获得反序列化的错误响应。身体

汝才良
2023-03-14

我使用的是改装版2.0.0-beta1。

在测试中,我有一个替代方案,预计会出现错误HTTP 400

我想改装一下。回答

MyError没有反序列化-我只在这里看到它

response.errorBody().string()

但它没有给我MyError作为对象

共有3个答案

姜飞飙
2023-03-14

我解决了它:

 if(!response.isSuccessful()){
       Gson gson = new Gson();
       MyErrorMessage message=gson.fromJson(response.errorBody().charStream(),MyErrorMessage.class);
       if(message.getCode()==ErrorCode.DUPLICATE_EMAIL_ID_CODE){
                  //DO Error Code specific handling                        
        }else{
                 //DO GENERAL Error Code Specific handling                               
        }
    }

MyErrorMessage类:

  public class MyErrorMessage {
     private int code;
     private String message;

     public int getCode() {
        return code;
     }

     public void setCode(int code) {
        this.code = code;
     }

     public String getMessage() {
         return message;
     }

     public void setMessage(String message) {
        this.message = message;
     }
   }
单于阳
2023-03-14

ErrorResponse是您的自定义响应对象

科特林

val gson = Gson()
val type = object : TypeToken<ErrorResponse>() {}.type
var errorResponse: ErrorResponse? = gson.fromJson(response.errorBody()!!.charStream(), type)

Java

Gson gson = new Gson();
Type type = new TypeToken<ErrorResponse>() {}.getType();
ErrorResponse errorResponse = gson.fromJson(response.errorBody.charStream(),type);
鲁才艺
2023-03-14

我目前使用的是一个非常简单的实现,它不需要使用转换器或特殊类。我使用的代码如下:

public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    DialogHelper.dismiss();

    if (response.isSuccessful()) {
        // Do your success stuff...
    } else {
        try {
            JSONObject jObjError = new JSONObject(response.errorBody().string());
            Toast.makeText(getContext(), jObjError.getJSONObject("error").getString("message"), Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }
}

这里需要注意的一点是,response.errorbody()。字符串()只会返回一次正确的值。如果您再次调用它,它将返回一个空字符串。因此,如果您想重用它,请在第一次调用时将值存储在变量中。

 类似资料:
  • 因此,当我对服务器进行POST API调用时,我得到一个带有JSON响应的400 Bad Request错误。 我管它叫 然而,问题是,一旦我得到响应,就调用onFailure(),这样就调用了//bb。在这里,我无法访问JSON响应。当我记录api请求和响应时,它根本不显示JSON响应。而可抛出的t是IOException。然而,奇怪的是,当我对Postman进行相同的调用时,它确实返回了预期的

  • 我使用的是改型2,我需要处理JSON格式的响应错误。下面是响应主体的示例。 包含有错误的字段列表,这意味着该值是动态的。因此,可能的解决方案之一是将响应体解析为JSON对象。我尝试使用 不幸的是,打印我只能得到以下结果

  • ClassCastException:com.google.gson.internal.LinkedTreeMap不能强制转换为java.util.HashMap 提前谢了。

  • 我正试图通过改型2获得原始响应。0.2. 到目前为止,我试图使用以下代码行打印响应,但它打印的是地址,而不是确切的响应正文。 日志i(“原始消息”,response.body()。toString());

  • 问题内容: 我试图反序列化以DateTime作为修饰符的类: 但是,当我尝试tro反序列化时,却遇到以下异常: 我用它来反序列化: 还有我的jsonData的示例: 问题答案: 期望使用无参数构造函数。的最新版本没有这样的构造函数。 如果您已固定格式,即。应该只是一个时间戳,那么你可以简单地注册与。它将在内部用于字段。您可以摆脱注释。 您需要添加库。

  • 我正在尝试使用SimpleXML将改装xml响应序列化到一个对象中。 但是出现以下例外情况: org.simpleframework.xml.core.值必需异常:无法满足@org.simpleframework.xml.ElementList(data=false,空=true,入口=,内联=true,名称=ALLFile,必需=true,类型=无效)字段'file" 响应示例: 对象: 我收到