我通过调用Gson.fromJson()获得了com.google.gson.JsonSyntaxException,因此添加了catch(Exception)逻辑,但是错误永远不会被捕获,而只会被抛出!
这就是我所拥有的:
Request request = new Request.Builder()
.url(getOrderUrlWithId)
.get()
.build();
try {
Response response = this.okHttpClient.newCall(request).execute();
GetOrderResult orderResult = gson.fromJson(gson.toJson(response.body().string()), GetOrderResult.class);
response.close();
} catch (IOException e) {
log.error("Error retrieving order : " + e.getMessage(), e);
throw new RuntimeException(e);
} catch (Exception e) {
log.error("Error happening for client PO: " + clientPO, e);
return null;
}
运行测试时,我得到“ com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但位于第1行第1列路径$ STRING “
为什么没有发现错误?
这是堆栈跟踪:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at com.google.gson.Gson.fromJson(Gson.java:927)
at com.google.gson.Gson.fromJson(Gson.java:892)
at com.google.gson.Gson.fromJson(Gson.java:841)
at com.google.gson.Gson.fromJson(Gson.java:813)
at com.hub.fulfill.circlegraphics.getOrdersByCgOrderId(CircleGraphicsApi.java:164)
答案 0 :(得分:1)
when(...)。thenReturn(null)表示您使用了某些模拟库(jMock,Mockery或类似库)。并且您定义了,如果fromJson(“ test”,Fulfillment.class)被调用模拟,则应返回null。由于已经定义了结果,因此不会调用fromJson的实际方法。 如果您希望引发期望,请删除行
when(gson.fromJson("test", Fulfillment.class)).thenReturn(null);
答案 1 :(得分:1)
弄清楚了。因此,事实证明@ Slf4j的log.error()调用将异常显示为Google StackDriver中的错误,因此告诉我我已经收到了数百万个错误。
答案 2 :(得分:1)
您需要像这样捕获JsonSyntaxException
对于Kotlin
catch(e:JsonSyntaxException){
//show toast/snackabar/log here
}
对于Java
catch(JsonSyntaxException e){
//show toast/snackabar/log here
}
更早之前,我还捕获了java.lang.IllegalStateException,但没有成功。 似乎这里的根本异常是JsonSyntaxException,因此,我们需要捕获这一异常。 它对我有用!