Как обрабатывать различные типы исключений http с помощью try-catch в Java? - PullRequest
1 голос
/ 23 июня 2019

Я новичок в API с Java, я пишу API RESTful, и теперь мне нужно написать обработчик API для обработки запроса от внешнего интерфейса.Просто заметил, что при обработке запроса существует множество разновидностей ошибок HTTP.

Поэтому мне интересно, как перехватить эти исключения с помощью try-catch в Java.

Я сделал одну очень простую 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?Нужно ли мне писать новый тип исключения?

1 Ответ

0 голосов
/ 23 июня 2019

Перехват других типов исключений

Вы можете 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 и регистрировать какое-либо сообщение вместо этого.

Реализация собственного исключения

Это, конечно, вариант, который может быть выполним, если у вас естьнекоторые пользовательские типы ошибок.

...