Учитывая приведенный ниже метод, как мне поступить с возможными исключениями, которые могут возникнуть? Я хочу оставить отзыв на уровне базы данных и на уровне JPA. Когда возникает нарушение ограничения, я хочу знать, в каком поле. Как бы вы обрабатывали исключения этого метода?
public static <T> void persist(T entity) {
try {
em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
} finally {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
}
}
Для ошибки № 1 вы должны отобразить эти исключения во внешнем интерфейсе, ответив пользователю кодом ошибки/статуса 4xx или любой другой визуальной обратной связью.
Две другие — это системные ошибки, о которых должны позаботиться программисты или специалисты по аппаратному обеспечению. Я обычно ловлю эти исключения, затем упаковываю их в электронное письмо и отправляю группам поддержки и программистам, в зависимости от исключения. Я также повторяю эту ошибку пользователю, если возможно, с поясняющим сообщением.
null
передается в качестве аргумента или что что-то внутри entity
не любит сериализацию. Это случаи, о которых программист должен быть проинформирован.ErrorHandlingServlet extends HttpServlet
, и каждый мой сервлет использует это, как в вашем случае, это будет SaveUserServlet extends ErrorHandlingServlet
или что-то в этом роде. Затем ErrorHandlingServlet
при необходимости отправляет электронное письмо и возвращает код состояния HTTP, включенный в пользовательское исключение.Я иду так глубоко, как обычные ParameterInvalidException
, ParameterMissingException
, EntityNotFoundException
.
Кроме того, у меня также есть некоторые очень специфические исключения, такие как UsernameNotFoundException
(действительно зависит от области применения приложения, хотите ли вы его использовать), или InsufficientRightException
(HTTP 401), или EntityStillAttachedException
.
Есть множество тех, которые вы можете приготовить, и вам решать, когда их использовать и как с ними обращаться.