【发布时间】:2019-05-18 07:44:27
【问题描述】:
我通过调用 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: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ "
为什么错误没有被捕获?
这是堆栈跟踪:
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)
【问题讨论】:
-
这是因为“test”不是字符串格式的有效json。它应该像 "{ "name" : "abc"}"。请提供相同的内容并进行测试。
-
@RajkumarNatarajan ^ 这如何解释未捕获并抛出异常的异常?
-
从上面的代码 sn-p 有两次
gson.fromJson("test", Fulfillment.class)和 IllegalStateException 是由于第一次。所以 try 中的下一个不会被调用。 -
请附上你得到的异常堆栈跟踪——这将使我们能够看到它被抛出的位置(可能在第 2 行,正如@RajkumarNatarajan 建议的那样)
-
您确定您运行的是最新版本的代码吗?在调试器中尝试,或者在抛出异常的行之前添加一条日志语句。
标签: java exception error-handling exception-handling gson