Похоже, что избыток излишков для создания 300 ошибок за 300 исключений. То, что я сделал, это создать собственный класс HttpErrorException
, который содержит ошибку HTTP, которую мы хотели бы вернуть. Разработчикам было рекомендовано выбросить один из них, когда они столкнулись с исключением или ошибкой. Если возникла ошибка, которая не была одной из новых HttpErrorExceptions
, то возвращается 500. Мы не преобразовали другие исключения в ошибки HTTP, потому что я чувствовал, что ошибочно полагать, что каждое возникновение конкретного Исключения всегда будет отображаться обратно на конкретную ошибку HTTP. Причина этого заключается в том, что существует множество зависимостей (другие библиотеки, которые мы используем), и они могут генерировать любые типы исключений, которые для любой конкретной ситуации могут не отображаться хорошо с ошибкой HTTP, которую мы имели в виду. Поэтому я скорее буду откровенен.
Вот примерный пример типичного использования.
Account getAccount(String id){
Account a = null;
try{
a = accountRepo.findById(id);
catch(Exception e) {
String error = "Got exception while trying to get Account from db.";
logger.(error, e);
throw new HttpErrorException(500, error);
//or throw new HttpErrorException(HttpStatus.INTERNAL_SERVER_ERROR, error);
}
throw404IfNull(a);
return a;
}
throwIf404IfNull
только простой метод, который мы создали, чтобы уменьшить if
заявления в нашем коде. У нас есть несколько из этих методов, и наш код не содержит операторов if
, которые в противном случае получили бы модульную проверку.
void throw404IfNull(Object obj){
if(obj == null) {
throw new HttpErrorException(400, "Object was not found");
}
}
Мы используем возможности обработки исключений Spring, чтобы отобразить все HttpErrorException
«S на хорошие хорошо отформатированные ошибки HTTP со статусом ошибки, которая находится в исключении.
1. ** Нет **. 2. Классифицируя ошибки способами, которые имеют смысл для разработчика для восстановления. Трассировка стека сообщит вам, где произошло исключение, поэтому неясно, почему вы хотели бы создать 300 пользовательских исключений. –
На самом деле нет необходимости создавать столько пользовательских исключений. Вероятно, вы обнаружите, что существующих классов исключений будет достаточно для использования вместо многих из созданных вами исключений. Затем вы можете сделать это более конкретным, передав разные сообщения и вызову конструктору для каждого исключения. https://www.cs.cmu.edu/~pattis/15-1XX/15-200/lectures/exceptions/lecture.html https://docs.oracle.com/javase/7/docs/api/java/ языки/Exception.html –