为什么 try/catch 异常不适用于 Gson.fromJson()?

P_e*_*021 6 java error-handling exception gson

我通过调用 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;
    }
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我得到“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)
Run Code Online (Sandbox Code Playgroud)

P_e*_*021 1

弄清楚了。结果@Slf4j 的 log.error() 调用将异常显示为 Google StackDriver 中的错误,因此告诉我我已经收到了数百万个错误。