【问题标题】:Error handling in src/groovy classessrc/groovy 类中的错误处理
【发布时间】:2013-04-28 13:26:22
【问题描述】:

我已经实现了一个简单的自然语言解析器作为我的 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 中,如果发现无效的 Token 等。

我处理这些错误并将它们发送回浏览器的最佳方法是什么?

我以前没有在这种级别的错误处理方面的经验,因此欢迎提出任何意见。

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

有什么想法吗?

【问题讨论】:

    标签: grails error-handling


    【解决方案1】:

    您可以throw 自定义异常到控制器并使用render

    //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 来自Controller 的调用数。例如,来自控制器的单个调用将最终创建 5 个 (Tokenizer, PartOfSpeechTagger, SyntacticAnalyser, SemanticAnalyser, CommandGenerator) 实用程序类的实例。

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

    或者显式地创建实用程序类 Singleton。

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

    【讨论】:

    • 是的,这很有帮助,谢谢,我认为没有并发问题?
    • 不,只要您在方法内部处理本地范围内的事情。在服务中使用全局范围并不是我要分享的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2016-08-18
    • 2015-09-12
    • 2017-06-10
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多