【发布时间】:2017-05-08 22:03:49
【问题描述】:
是否支持在控制器动作参数中使用抽象命令对象?然后根据 JSON 请求中的给定参数,它会选择正确的命令对象吗?
例如:
class SomeController {
def someAction(BaseCommand cmd){
// cmd could be instance of ChildCommandOne or ChildCommandTwo
}
class BaseCommand {
String paramOne
}
class ChildCommandOne extends BaseCommand {
String paramTwo
}
class ChildCommandTwo extends BaseCommand {
String paramThree
}
}
到目前为止,我一直在使用request.JSON 来检测传入的参数并实例化正确的 Command 对象。这是我处理这种情况的唯一选择吗?
编辑:
在这里澄清用例。我有两个共享相同基类域模型的域模型,并且我正在使用默认的table-per-hierarchy 模型对数据库中的继承进行建模。
在我的例子中,一个子域模型Model A 需要一个名为body 的不可空字符串,这是一个文本条目,而另一个Model B 需要一个名为directUrl 的不可空字符串。这些代表可以在平台上发布的公告。 Model A 是包含公告正文的写入条目,而Model B 表示包含实际公告的第三方站点的链接。
在这些场景中,我通常会在控制器操作中放置一个 if 语句来确定要实例化哪个相关命令对象,但我希望有一个更简洁的方法。
【问题讨论】:
-
好吧,我认为这不是一个好方法,如果您有 3 个不同的命令,为什么不创建 3 个不同的操作?如果你解释一下你的用例可能会更容易
-
@rgrebski 我已更新问题以包含我的实际用例。此外,我如何区分这 3 个操作而无需在我的 url 映射中正式声明单独的端点?
标签: grails grails-controller command-objects