我有一个后端,即使请求有错误,也会返回200个HTTP代码:
{
"error": {
"message": "Generic error",
"code": 13000
}
}
现在,我如何访问原始响应体,在使用:
.addConverterFactory(GsonConverterFactory.create(gson))
我试过:
response.raw().body().string()
但我得到:
java.lang.IllegalStateException: Cannot read raw response body of a converted body.
我已经实现了一个通用的APICallback类,它应该“阻止”成功并触发一个APIError事件:
abstract class APICallback<T> implements Callback<T> {
abstract void onSuccess(Call<T> call, T result);
@Override
public void onResponse(Call<T> call, Response<T> response) {
if (response.body() != null) {
if (response.body() instanceof APIError) {
// this is not working
} else {
onSuccess(call, response.body());
}
} else {
apiError = new APIError("Unknown error");
bus.post(new APIErrorEvent(apiError));
}
}
@Override
public void onFailure(@NonNull Call<T> call, @NonNull Throwable t) {
String message = t.getLocalizedMessage() != null ? t.getLocalizedMessage() : "Unknown error";
apiError = new APIError(message);
bus.post(new APIErrorEvent(apiError, source));
}
}
我想试试“自动转换器”的功能。。。非常感谢。
对于错误响应,您必须采用 response.errorBody() 而不是 response.body()
abstract class APICallback<T> implements Callback<T> {
abstract void onSuccess(Call<T> call, T result);
@Override
public void onResponse(Call<T> call, Response<T> response) {
if (response.body() != null) {
if (response.body() instanceof APIError) {
// this is not working
} else {
onSuccess(call, response.body());
}
} else {
apiError = new APIError("Unknown error");
bus.post(new APIErrorEvent(apiError));
}
}
@Override
public void onFailure(@NonNull Call<T> call, @NonNull Throwable t) {
String message = t.getLocalizedMessage() != null ? t.getLocalizedMessage() : "Unknown error";
apiError = new APIError(message);
bus.post(new APIErrorEvent(apiError, source));
}
}
换成
abstract class APICallback<T> implements Callback<T> {
abstract void onSuccess(Call<T> call, T result);
@Override
public void onResponse(Call<T> call, Response<T> response) {
if (response.isSuccessful()) {
if (response.body() != null) {
onSuccess(call, response.body());
}
} else {
if (response.errorBody() != null) {
if (response.errorBody() instanceof APIError) {
}
} else {
apiError = new APIError("Unknown error");
bus.post(new APIErrorEvent(apiError));
}
}
}
@Override
public void onFailure(@NonNull Call<T> call, @NonNull Throwable t) {
String message = t.getLocalizedMessage() != null ? t.getLocalizedMessage() : "Unknown error";
apiError = new APIError(message);
bus.post(new APIErrorEvent(apiError, source));
}
}
改装版本:2.1.0 OkHttp版本:3.4.1 在我的Retromet实现的方法中,我有以下逻辑: 这里的是我自己的类型(与OkHttp的无关),它包装了一个泛型,其中是一个接口,它公开了一个方法,用于确认反序列化的响应满足给定的约束。 如果我收到一个表面上成功的响应(HTTP代码2XX、非空响应主体等)。),但其反序列化的主体没有通过此验证步骤(即返回false),我想呈现一个对话框,其消息
通过原始访问日志,您可以查看访问过您网站的用户,而无需显示图形,图表或其他图形。 您可以使用“原始访问日志”菜单下载站点的服务器访问日志的压缩版本。 当您想要快速查看谁访问过您的网站时,这非常有用。 这是域名列表的Raw Access界面 - 在这里,进行原始日志的管理。 精心设计的日志可供下载。 您还可以配置删除或归档域的原始日志。
当对象相加 obj1 + obj2,相减 obj1 - obj2,或者使用 alert(obj) 打印时会发生什么? 在这种情况下,对象会被自动转换为原始值,然后执行操作。 在 类型转换 一章中,我们已经看到了数值,字符串和布尔转换的规则。但是我们没有讲对象的转换规则。现在我们已经掌握了方法(method)和 symbol 的相关知识,可以开始学习对象原始值转换了。 所有的对象在布尔上下文(con
问题内容: 我试图理解Java中日益缩小的原始转换概念。这是JLS 5.1.3 所说的: 关于原始类型的22种特定转换称为“缩小原始转换”: 短字节或字符 字符到字节或短 从int到byte,short或char 长到字节,短,字符或整数 浮点到字节,short,char,int或long 双精度字节,短整数,字符,整数,长整数或浮点数 由于是隐式转换转换到,我们可以写出下面的代码: 演示 但这是
我正在阅读Java语言的规范,关于赋值的转换,我试图获得基本规则,有些文献让我很困惑。有一些出版物说: 要求加宽基元转换后接装箱转换。这不是允许的转换。我理解编译错误和作业的上下文。但真的是一个扩大的原始转换?我的理解如下:Integer<-Short<-Short<-int我看到Integer和Short之间的加宽。还是我糊涂了?
我有模量 目前,我正在提取完整的260个字节(指数为4个字节,模数为256个字节)并编码为base 64。我使用以下shell命令这样做: 这给我以下字符串: 现在,当我拿钥匙的时候。pem密钥对表示模数 我得到这个字符串(我已经省略了标题 您可以看到,我提取的密钥数据和base64编码的密钥数据实际上存在于从密钥中提取的有效公钥数据的数据中。pem使用openssl。然而,开头有45个字符,我自
我在这里遵循Spring启动教程: 使用rest服务的Spring boot教程 本教程工作正常,但是否有一种方法可以在原始JSON被解组(通过jackson JSON处理库)之前打印它以用于日志记录?
我有一个文件包。crd。伊滕是这样的 我需要将其导入到以下格式的excel文件中。 我试过这个代码,但不起作用 请帮忙