我是使用 Java 的 API 的初学者,我正在编写 RESTful API,现在我需要编写 API 处理程序来处理来自前端的请求。刚刚注意到在处理请求时有很多种HTTP错误。
所以我想知道如何在 Java 中使用try-catch
捕获这些异常。
我做了一个非常基本的try-catch
来处理InvalidRequestException
,它指的是客户端的异常。
@Override
public String handle(final APIGatewayProxyRequestEvent event) {
if (event.getHttpMethod().equalsIgnoreCase(HttpMethod.POST.name())) {
try{
FeatureRecord featureRecord = Jackson.fromJsonString(event.getBody(), FeatureRecord.class);
featureProcessor.createFeature(featureRecord);
return EMPTY_STRING;
} catch (Exception ex) {
throw new InvalidRequestException(ex);
}
}
现在我想拆分异常类型以区分不同的 HTTP 异常,如下所示:
@Override
public String handle(final APIGatewayProxyRequestEvent event) {
if (event.getHttpMethod().equalsIgnoreCase(HttpMethod.POST.name())) {
try{
FeatureRecord featureRecord = Jackson.fromJsonString(event.getBody(), FeatureRecord.class);
featureProcessor.createFeature(featureRecord);
return EMPTY_STRING;
} catch (InvalidRequestException ex) {
throw new InvalidRequestException(ex);
} catch (ServiceInternalException ex) {
throw new ServiceInternalException(ex);
} ... ...
}
但是我不知道如何编写catch
部分。
我知道 https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500 有很多异常类型,但是如何使用try-catch
来处理它们?是否需要编写新的异常类型?
捕获更多异常类型
您可以使用单个catch
catch
多个异常类型,如果您捕获了它们的共同祖先class
。例如
try {
//some code
} catch (Exception ex) {
//handling the catch
}
将捕获所有异常,因此请尽可能笼统,但仍正确处理错误,因此捕获Exception
可能是也可能不是您的选择,具体取决于您的情况。
处理异常的方法
您正在捕获多个异常类型,而不是处理或抛出它们,而是throw
相同类型的异常。例如,没有理由这样做:
try {
//some code
} catch (InvalidRequestException ex) {
throw new InvalidRequestException(ex);
}
取而代之的是:
try {
//some code
} catch (InvalidRequestException ex) {
throw ex;
}
但是,如果您的catch
只抛出相同的异常,那么catch
根本没有意义。您需要使错误对用户友好,即向用户发送响应,解释问题,然后throw
异常。或者,您可以避免在catch
内引发异常,而是记录一些消息。
实现您自己的异常
这当然是一个选项,如果您有一些自定义错误类型,这可能是可行的。