似乎有点过分,可以为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
的映射到同是在异常的错误状态很好很好格式化的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 –