Основная ошибка проектировать исключения с учётом как их будут использовать, использование исключений это задача кода приложения, код приложения может быть разный, может меняться например
Сервис пользователя UserService имеет метод получения пользователя по id на выходе только UserEntity если по каким то причинам нет пользователя то кидани UserNotFoundException
Теперь приложение варианты использования:
1. Для рест апи в контроллере сделаем запрос на получение пользователя и обработав исключение там же отправим ответ 404, отсутствие пользователя не так критично.
2. Есть форма сохранения например товара или заказа, и нужно получит информацию о пользователе по его сессионной id, делаем запрос а пользователя нет, обрабатываем исключение например глобальным обработчиком приложения и логируем, выдаём пользователю уведомление о сбое, вот тут критично. 500 ответ