繁体   English   中英

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

[英]How to handle different exception http types with try-catch in Java?

我是Java API的初学者,正在编写RESTful API,现在需要编写API Handler来处理来自前端的请求。 只是注意到在处理请求时有很多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处理它们? 我需要编写新的异常类型吗?

捕获更多异常类型

如果捕获它们的共同祖先class则可以通过一次catchcatch几种异常类型。 例如

try {
    //some code
} catch (Exception ex) {
    //handling the catch
}

将捕获所有异常,因此请尽可能地笼统,但仍会正确处理错误,因此根据您的情况,捕获Exception可能是您的选择,也可能不是。

处理异常的方法

您正在捕获几种异常类型,而不是处理或throw它们,而是throw相同类型的异常。 例如,没有理由这样做:

try {
    //some code
} catch (InvalidRequestException ex) {
    throw new InvalidRequestException(ex);
}

代替这个:

try {
    //some code
} catch (InvalidRequestException ex) {
    throw ex;
}

但是,如果你catch 抛出同样的异常,那么就具有不点catch的。 您需要使错误变得用户友好,即,向用户发送响应以解释问题,然后throw异常。 或者,您可以避免在catchcatch所有异常,而是记录一些消息。

实现自己的异常

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM