gpt4 book ai didi

java - 使用返回值处理异常

转载 作者:行者123 更新时间:2023-12-01 09:08:07 27 4
gpt4 key购买 nike

我正在 Play 框架中构建一个应用程序,并且在我的一个函数定义中面临挑战。这实际上并不是一个 Play 框架问题,但它适用于 Play,因为 sbtcompile 由于此错误而失败。

所以我的一个类中有这个函数:

private JSONObject getJsonObject(String url) {
HttpResponse<JsonNode> response;

try {
response = Unirest.get(url).asJson();
} catch (UnirestException e) {
Logger.error("Failed to GET data. Connection string was: " + url);
e.printStackTrace();
}
return response.getBody().getObject();
}

我决定在函数中捕获异常的原因是我不希望我的函数抛出异常。因为这样,这个 try-catch 需要在调用该函数的多个地方完成。我可以通过放置一个 throws UnirestExecption 来避免这种情况,但这会在整个函数堆栈中一直冒泡,一直到类构造函数。

但是,使用当前代码,我的 IDE 和 sbtcompile 都告诉我:

[error]: variable response might not have been initialized

在这种情况下我该如何摆脱这个困境?我似乎无法执行 new HttpResponse() 因为 class definition我觉得太可怕了。我当然不能再执行一次 Unirest.get() 因为那会抛出自己的异常!

什么是更简洁的出路?

最佳答案

如果抛出异常,您期望的响应是什么?如果 response = Unirest.get(url).asJson(); 抛出异常,您的响应对象将未初始化。

您可以包装捕获的异常并重新抛出它,如下所示:

private JSONObject getJsonObject(String url) {
HttpResponse<JsonNode> response;

try {
response = Unirest.get(url).asJson();
} catch (UnirestException e) {
Logger.error("Failed to GET data. Connection string was: " + url);
throw new RuntimeException(e);
}
return response.getBody().getObject();
}

或者如果 GET 请求失败则返回一些默认值:

private JSONObject getJsonObject(String url) {
HttpResponse<JsonNode> response;

try {
response = Unirest.get(url).asJson();
} catch (UnirestException e) {
Logger.error("Failed to GET data. Connection string was: " + url);
return null;
}
return response.getBody().getObject();
}

关于java - 使用返回值处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41087536/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com