【问题标题】:Is it possible to catch 'Execution exception' in Java Play Framework?是否可以在 Java Play 框架中捕获“执行异常”?
【发布时间】:2015-07-02 20:55:39
【问题描述】:

我想以某种方式捕获通常显示在浏览器中的“执行异常”。我只是不喜欢我必须手动验证数据的事实,因为它们似乎已经被 Play 验证了。
例如,我想捕获如下异常。

[IllegalStateException: Error(s) binding form: {"email":["Valid email 必填"]}]

在我的示例中,它出现在User user = Form.form(User.class).bindFromRequest().get(); 之后。

【问题讨论】:

    标签: java playframework playframework-2.0


    【解决方案1】:

    IllegalStateException 是运行时异常,不应被捕获。 将您的代码替换为:

    Form<User> userForm = Form.form(User.class).bindFromRequest();
    if(userForm.hasErrors()) {
        return badRequest();
    } else {
        User user = userForm.get();
        // whatever
        return ok();
    }
    

    【讨论】:

    • 已修复。忘记添加泛型。
    • “[RollbackException: Error while committing the transaction]”怎么样?我可以和他们做点什么吗?将不胜感激快速答复。
    • Error while committing the transaction 听起来像是一个严重的SQL 异常。在控制台的堆栈跟踪中寻找提示。
    • 是 SQL 异常。在 'JPA.em().persist(userForm.get());' 之后发生当用户已经存在时。我只是不知道我是否能以某种方式捕获这样的异常,或者我必须在调用'persist(userForm.get())'之前手动检查用户是否已经存在于我的数据库中。你会如何解决这个问题?
    • 在这两种情况下都有陷阱。您可以采取乐观的方法,尝试插入用户,捕获异常并返回错误的请求响应。如果你想检查用户是否已经存在 - 从事务中进行,否则你会像第一种方法一样收到异常。
    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多