Исключение внутренних блоков будет поймано основным try-catch, но мне нужно их поднять

Когда этот код поднять NotFoundException исключение основного блока будет поднят, но я хотел бы поднять NotFoundExceptionкак мне это сделать?

try {
    if (x > y) {
        throw new NotFoundException("entity is not found");
    }
} catch (final Exception e) {
    throw new InternalServerErrorException(e);
}

2 ответа

Решение
try {
    if (x>y)
        throw new NotFoundException("entity is not found");
} catch (Exception e) {
    if (e instanceof NotFoundException) {
        throw e;
    } else {
        throw new InternalServerErrorException(e);
    }
}

или же...

try {
    if (x>y)
        throw new NotFoundException("entity is not found");
} catch (NotFoundException e) {
    throw e;
} catch (Exception e) {
    throw new InternalServerErrorException(e);
}

Во-первых, вам не нужен блок try catch. Вы могли бы просто использовать

if (x > y) {
    throw new NotFoundException("entity is not found");
}

Очевидно, что внутреннее исключение в вашем коде будет перехватываться в блоке try catch, а не перехватывать Exception в вашем блоке catch вы можете поймать более конкретное исключение. Например, если ожидается выброс блока кода IOException, а не ловить Exception ты должен поймать IOException

Другие вопросы по тегам