我一直在收到com.google.格森。JsonSyntaxException无法调用Gson。fromJson(),因此添加了一个捕获(异常)逻辑,但错误永远不会被捕获,而只是被抛出!
这是我所拥有的:
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\u对象,但在第1行第1列路径$处为字符串”
为什么错误没有被捕获?
这是Stack跟踪:
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)
找到了答案。原来是@Slf4j的日志。error()调用将该异常显示为Google StackDriver中的一个错误,因此告诉我已经收到数百万个错误。
何时(…)。然后返回(null)您使用一些模拟库(jMock、Mockry或simular)的点。您定义,如果调用fromJson(“test”,Fulfillment.class),则应返回null。由于您已经定义了结果,所以不会调用来自JSON的实际方法。如果希望抛出expection,请删除行
when(gson.fromJson("test", Fulfillment.class)).thenReturn(null);
您需要像这样捕获JsonSynaxException
对于Kotlin
捕获(e:JsonSyntaException){
//show toast/snackabar/log here
}
对于Java
捕获(JsonSyntaxException e){
//show toast/snackabar/log here
}
早些时候,我也在学习java。lang.IllegalStateException但它不起作用。这里的根异常似乎是JsonSyntaxException,因此,我们需要捕获这个。这对我有用!
问题内容: 我试图让用户有机会在引入会产生错误但又无法正常工作的东西之后重复输入,因为一旦发现 错误, 就不会再次执行try东西,而是直接进入catch东西,生成一个永恒的东西。柱。这是我的代码: 问题答案: 输入非整数时,对的调用不会消耗非整数。您需要致电(或)使用它。就像是,
问题内容: 我试图让用户有机会在引入会产生错误但又无法正常工作的东西之后重复输入,因为一旦发现 错误, 就不会再次执行try东西,而是直接进入catch东西,生成一个永恒的东西。柱。这是我的代码: 问题答案: 输入非整数时,对的调用不会消耗非整数。您需要致电(或)使用它。就像是,
问题内容: 可以在Swift中捕获异常吗?给出以下代码: 是否可以防止异常导致整个程序崩溃?也就是说,Objective-C中的Swift等效于什么: 问题答案: 它没有异常处理,并且在开发人员论坛中的讨论讨论了为什么会这样: 但请记住,可可和可可触控传统上并不打算让您捕获异常。他们打算让您不要将它们放在首位。普通错误应使用可选类型和inout NSError参数处理;您应该通过编写更好的代码来解
我调用了一个抛出异常的方法,但我不需要将此方法放在静态void main(String args[])中的try-catch块中,即使本教程说我应该得到一个错误。为什么会这样?下面是我的代码和教程的链接。我仔细研究了教程中的第二个示例。 https://beginnersbook.com/2013/04/java-throws/?unapproved=133049
我正在尝试捕获caller方法中的IllegalAccessException。但它抓不到它。而是给出了一个错误。
我有一个使用JSoup连接和解析网站数据的程序。当网站在我给出的10秒超时后无法连接时,JSoup方法会抛出一个Uncheck edIOException。这可能包含一个IOException,例如“SSL Peer意外关闭”或“超时”,这是我过去处理过的IOExceptions。这很奇怪,因为它包含一个try catch: 我已经做了各种变通方法,比如在try-catch中包装该方法,使该方法抛