如何在Java中使用try-catch处理不同的异常http类型?
我是Java API的初学者,我正在编写RESTful API,现在我需要编写API处理程序来处理前端的请求。刚刚注意到在处理请求时有很多种HTTP错误 所以我想知道如何用Java中的如何在Java中使用try-catch处理不同的异常http类型?,java,rest,http,exception,try-catch,Java,Rest,Http,Exception,Try Catch,我是Java API的初学者,我正在编写RESTful API,现在我需要编写API处理程序来处理前端的请求。刚刚注意到在处理请求时有很多种HTTP错误 所以我想知道如何用Java中的try-catch捕获这些异常 我做了一个非常基本的try catch来处理InvalidRequestException,它指的是来自客户端的异常 @Override public String handle(final APIGatewayProxyRequestEvent event) {
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
部分
我知道中有许多异常类型,但是如何使用try-catch
处理它们呢?是否需要编写新的异常类型?捕获更多异常类型
如果捕获它们的共同祖先类
,则可以使用单个捕获
捕获多个异常类型。比如说
try {
//some code
} catch (Exception ex) {
//handling the catch
}
将捕获所有异常,因此请尽可能一般化,但仍要正确处理错误,因此捕获异常
可能是您的选项,也可能不是,具体取决于您的情况
处理异常的方法
您正在捕获多个异常类型,而不是处理它们或抛出它们,而是抛出一个相同类型的异常。例如,没有理由这样做:
try {
//some code
} catch (InvalidRequestException ex) {
throw new InvalidRequestException(ex);
}
与此相反:
try {
//some code
} catch (InvalidRequestException ex) {
throw ex;
}
但是如果您的catch
只是抛出了相同的异常,那么拥有catch
就没有任何意义了。您需要将错误设置为用户友好的,也就是说,向用户发送一个解释问题的响应,然后抛出异常。或者,您可以避免在catch
中抛出异常,而是记录一些消息
实现您自己的异常
当然,这是一个选项,如果您有一些自定义错误类型,这是可行的。捕获更多异常类型
如果捕获它们的共同祖先类
,则可以使用单个捕获
捕获多个异常类型。比如说
try {
//some code
} catch (Exception ex) {
//handling the catch
}
将捕获所有异常,因此请尽可能一般化,但仍要正确处理错误,因此捕获异常
可能是您的选项,也可能不是,具体取决于您的情况
处理异常的方法
您正在捕获多个异常类型,而不是处理它们或抛出它们,而是抛出一个相同类型的异常。例如,没有理由这样做:
try {
//some code
} catch (InvalidRequestException ex) {
throw new InvalidRequestException(ex);
}
与此相反:
try {
//some code
} catch (InvalidRequestException ex) {
throw ex;
}
但是如果您的catch
只是抛出了相同的异常,那么拥有catch
就没有任何意义了。您需要将错误设置为用户友好的,也就是说,向用户发送一个解释问题的响应,然后抛出异常。或者,您可以避免在catch
中抛出异常,而是记录一些消息
实现您自己的异常
当然,这是一个选项,如果您有一些自定义错误类型,这是可行的。您不应该只捕获并抛出相同的异常。如果这就是你所做的,不要抓住它,仅仅添加它作为新异常的原因是没有意义的。问题是:当请求无效时,您想做什么?当服务出现内部故障时,您想做什么?一旦你知道了这一点,你就可以正确地编写
catch
代码了。我恐怕不清楚你在问什么。使用try
/catch
捕获在try
块中编写的代码引发的异常。这段代码真的会引发这些异常吗?例如,它看起来不像是,我无法想象为什么Jackson会像读取字符串那样引发异常。你不应该只是捕获并抛出相同的异常。如果这就是你所做的,不要抓住它,仅仅添加它作为新异常的原因是没有意义的。问题是:当请求无效时,您想做什么?当服务出现内部故障时,您想做什么?一旦你知道了这一点,你就可以正确地编写catch
代码了。我恐怕不清楚你在问什么。使用try
/catch
捕获在try
块中编写的代码引发的异常。这段代码真的会引发这些异常吗?例如,它看起来不像是,我无法想象杰克逊为什么会提出这样的异常,比如读字符串。