我已经实现了一个简单的自然语言解析器作为我的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
等等。
我处理这些错误的最佳方式是什么,并将它们发回broswer?
我以前没有这种级别的错误处理经验,所以欢迎任何输入。
最初我曾想过抛出一个自定义InvalidTokenException
并在控制器中捕获它,并将文本呈现给客户端,但这看起来不对吗?!
有什么想法吗?
答案 0 :(得分: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
的{{1}}次调用,每个实例的n
个实例数为Controller
个。例如,来自控制器的单个调用最终将创建5个(Tokenizer, PartOfSpeechTagger, SyntacticAnalyser, SemanticAnalyser,
CommandGenerator
)实用程序类的总实例。
要优化上述实现,您可以为每个实用程序添加service
个类。由于service
类默认为Singleton
。每台服务器只会创建一个实例。因此,您将在整个应用程序中最终获得5个实用程序服务实例。
或者明确地使用实用程序类Singleton。
只是一个可能对你感兴趣的想法。