java - Java 中的异常

标签 java exception web-applications

目前我正在使用 Playframework2 开发网站。我只是编程的初学者。我读了一些关于异常的书,但现在在现实世界中,异常处理真的很奇怪。

老实说,我真的不在乎抛出什么异常,我以相同的方式处理所有异常。 返回 badrequest(); 。我只使用异常记录。

try{
...
}
catch(Exeption e){
//log
return badrequest();
}

但这是太多的样板文件,写起来真的很烦人,因为每个方法都会抛出相同的异常。

有什么提示、提示或资源可以给我吗?

编辑:

一个例子是我的“全局”配置文件。因为每次我认为我可以为这个问题写一个单例时,我都需要连接到数据库。

private Datastore connect() throws UnknownHostException, MongoException,
            DbAuthException {

        Mongo m = new Mongo(dbUrl, dbPort);
        Datastore ds = new Morphia().createDatastore(m, dbName);
        boolean con = ds.getDB().authenticate(username, password.toCharArray());
        if (!con)
            throw new DbAuthException();
        return ds;
    }

每次我想连接到数据库时,这也会导致 try and catch。我的问题是我认为我无法自信地处理它们。

代码示例:

public static Result addComment(String title) {
        try {

            Datastore ds = DatabaseConnect.getInstance().getDatastore();
            Form<Comment> filledForm = commentForm.bindFromRequest();
            Comment userComment = filledForm.get();
            userComment.setUsername(Util.getUsernameFromSession(ctx()));
            User.increasePointsBy(ctx(), 1);
            UserGuides.addComment(title, userComment);
        } catch (Exception e) {
            return badRequest();
        }
        return redirect(routes.Guides.blank());
    }

在这种情况下,我懒得一遍又一遍地编写相同的 try 和 catch,这是重复的代码。

也许有一本书解释了如何设计带有异常处理的大型应用程序?

最佳答案

当您调用一个方法时,您不一定非要立即捕获异常。您可以让调用者处理它们(如果是已检查的异常,则声明一个 throws 子句)。事实上,无需任何额外工作即可将它们传递给调用者的能力是异常的显着特征。

我的团队采用了以下编码标准:当我们想要从故障中恢复时,我们会为那些罕见的情况抛出检查异常,而对于其他任何情况则抛出未经检查的异常。在调用堆栈中如此之高以至于所有请求都通过它(例如在 ServletFilter 中)的方法中,只有一个 catch block 用于未经检查的异常。此 catch block 记录异常,并将用户转发到“抱歉,这不应该发生”页面。

关于java - Java 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994691/

相关文章:

c - 我的 C 程序的浮点异常

python - 忽略Python异常并直接在子模块代码中继续

python - 如何测量我的 Web 应用程序的实际响应时间?

java - 如何在管理中检查数据库中的真/假值,并相应地重定向? (Web应用程序)

ajax - 新 Web 应用程序的最佳工具包(奇怪的要求)

java - Kotlin 中的一切都是对象吗?

java - 如何创建从队列执行随机任务的线程池

iphone - MonoTouch - 类型加载异常,更新的程序未在模拟器中注册

java - ExitButtonHandler不是抽象的,不会重写ActionListener中的抽象方法actionPerformed(ActionEvent)

Java 12.0.1 中的 JavaFX