我是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
处理它们呢?我需要编写新的异常类型吗?
答案 0 :(得分:0)
如果捕获到它们的共同祖先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
内引发所有异常,而是记录一些消息。
这当然是一个选择,并且如果您有一些自定义错误类型,这可能是可行的。