Исключение внутренних блоков будет поймано основным 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