在我们的代码库中,我们在控制器中有一个闭包,如下所示:
def doComputation = {
def someObject = SomeObject.read(params.long("objectId"))
//some irrelevant logic
def response = [importantVariable : importantInteger, someOtherVariable : someOtherInteger]
render response as JSON
}
当然,这通常是从.gsp页面调用的,但是有没有办法从不同控制器中的闭包调用它呢?
def someOtherClosure = {
//some more irrelevant logic
def responseFromOtherClosure = doComputation(objectId : someLong)
theValueIWant = responseFromOtherClosure.importantVariable
//more logic
}
1条答案
按热度按时间z4bn682m1#
但是有没有办法从不同控制器中的闭包调用它呢?
是有的。
闭包只是控制器类中的属性,它们是
public
。控制器被配置为Spring bean,因此您可以(不应该)将一个控制器注入到另一个控制器中,然后从那里引用闭包属性。我认为这回答了您的问题,但没有很好的理由这样做。正确的解决方案将取决于一些细节,但如果您有2个控制器操作需要共享一些逻辑,最佳实践是将该逻辑移动到一个服务中,并将该服务注入到所有需要它的控制器中。
根据您尝试完成的任务,您可能希望第一个控制器发出redirect或forward,这将导致第二个控制器,而不是直接从另一个控制器调用控制器的代码(同样,这样做也没有什么好的理由)。