Grails src/groovy类中的错误处理

Grails src/groovy类中的错误处理,grails,error-handling,Grails,Error Handling,作为grails应用程序的一部分,我实现了一个简单的自然语言解析器,以实现一个命令行界面,用户可以在其中输入命令,如“创建新用户”,应用程序将执行此任务等。我创建了以下文件: Tokenizer.groovy PartOfSpeechTagger.groovy SyntacticAnalyser.groovy SemanticAnalyser.groovy CommandGenerator.groovy 它们被放置在src/groovy 在我的控制器中有一个run()方法,该方法实例化这些解析

作为grails应用程序的一部分,我实现了一个简单的自然语言解析器,以实现一个命令行界面,用户可以在其中输入命令,如“创建新用户”,应用程序将执行此任务等。我创建了以下文件:

Tokenizer.groovy
PartOfSpeechTagger.groovy
SyntacticAnalyser.groovy
SemanticAnalyser.groovy
CommandGenerator.groovy
它们被放置在
src/groovy

在我的控制器中有一个
run()
方法,该方法实例化这些解析器类并调用这些对象中的方法,如下所示:

 def run()
    {       
        def tokenizer = new Tokenizer()
        def posTagger = new PartOfSpeechTagger()
        def syntacticAnalyser = new SyntacticAnalyser()
        def semanticAnalyser = new SemanticAnalyser()
        def commandGenerator = new CommandGenerator()

        //split command string into tokens
        def words = tokenizer.getTokens(params.command)
          def taggedWords  = posTagger.tagWords(words)
          ... and so on
     }
我的问题是,我希望能够将这些解析器类中出现的错误消息发送回客户机,例如,如果发现无效的
令牌
,则在
Tokenizer

对于我来说,处理这些错误并将其发送回broswer的最佳方法是什么

我以前没有这种级别的错误处理经验,因此欢迎任何输入

起初我想抛出一个自定义的
InvalidTokenException
,并在控制器中捕获它,然后将文本呈现给客户端,但这似乎不对


有什么想法吗?

您可以
将自定义异常抛出到控制器并使用
渲染

//You can use whichever contentType you need, here I have mentioned json
render (status: HttpStatus.NOT_FOUND.value(), contentType: "application/json" text: exception.getMessage())
还有一点我想我应该分享。您在
src/groovy
中添加的所有解析器实用程序类都很好,但最后您将看到
n
每个类的实例数,用于
n
来自
控制器的调用数。例如,来自控制器的单个调用将最终创建5(
Tokenizer,speechtager的一部分,syntacticalyser,SemanticAnalyser,
CommandGenerator
)实用程序类的总实例

要优化上述实现,可以为每个实用程序提供
服务
类。由于
service
类默认为
Singleton
。每个服务器只创建一个实例。因此,在整个应用程序中,您将得到5个实用程序服务实例

或者将实用程序类显式设置为单例


这只是一个您可能感兴趣的想法。

是的,这很有帮助,谢谢,我想这不存在并发问题吗?不,只要您在方法内部的局部范围内处理事情。在服务中使用global scope并不是我想要分享的建议。