如何在 Java 中使用 try-catch 处理不同的异常 http 类型?



我是使用 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来处理它们?是否需要编写新的异常类型?

捕获更多异常类型

您可以使用单个catchcatch多个异常类型,如果您捕获了它们的共同祖先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内引发异常,而是记录一些消息。

实现您自己的异常

这当然是一个选项,如果您有一些自定义错误类型,这可能是可行的。

最新更新