gpt4 book ai didi

grails - 事务服务导致ErrorController呈现而不是所需的 View

转载 作者:行者123 更新时间:2023-12-02 15:26:32 25 4
gpt4 key购买 nike

我继承了一个使用错误 Controller 的grails项目。

URLMappings中,包含以下条目:

"500"(controller: 'error', action:'error')

特定的errorController呈现特定的 View :
 render view:'/error/prodError'

我不明白的是如何绕过500个错误的错误 Controller 并发送以查看 /play/play ,但是不删除旧的

即使从playService捕获异常,我仍然会得到 /error/prodError而不是 /play/play

我调试了代码,并看到 render方法被调用了两次。它被调用一次以转到 /play/play,但是另一次调用 /error/prodError则是在服务中引发异常并将事务回滚时。

请参阅下面的playController摘录:

PlayController
try{
playService.play(parame:params} //Runtime exception thrown from playService.
//play is transactional
}
catch(Throwable t){
//Why isn't /play/play rendered?
//How do I pass errors to playservice for alert rendering?
render view: '/play/play',
model: [
domain: domain,
customer: customer,
game: game]
return
}

更新

具体来说,由于回滚的结果是 UnexpectedRollbackException,因此输入errorController。

SO:有人会怎么不输入由特定 ErrorController生成的特定类型 ExceptionController

最佳答案

如果您不想在 Controller 中处理错误,则可以使用以下网址映射呈现您的(或任何其他) View :

"500"(view:'/play/play')

如果您需要处理单个异常,可以这样:
static mappings = {
.
.
.
"500"(controller: "error", action: "unexpectedRollback", exception: UnexpectedRollbackException)
"500"(controller: "errors", action: "nullPointer", exception: NullPointerException)
.
.
"500"(controller: 'error', action:'error')
}

docs中所述,您应该避免由于 StackOverflowExceptions而从错误 Controller 抛出异常。我认为不可能在同一个类型的两个异常之间进行划分,但是它们是从不同的 Controller 抛出的。

如果您在错误 Controller 中处理异常,则可以尝试直接设置响应代码。因此-网址映射可能无法处理您已经处理的异常。

关于grails - 事务服务导致ErrorController呈现而不是所需的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com