在Grails中,作为命令对象或命令对象属性处理抽象域类的预期方式是什么?

在Grails中,作为命令对象或命令对象属性处理抽象域类的预期方式是什么?,grails,data-binding,gorm,command-objects,Grails,Data Binding,Gorm,Command Objects,Grails支持将域类作为命令对象的现成属性。我可以将域类Stuff与命令StuffCommand一起使用,但如果Stuff是抽象类,则不能使用 Stuff.groovy abstract class Stuff{ } class StuffCommand{ Stuff stuff } class ExampleController{ def doStuffWithStuff(StuffCommand stuffCmd){ render stuffCmd.st

Grails支持将域类作为命令对象的现成属性。我可以将域类
Stuff
与命令
StuffCommand
一起使用,但如果
Stuff
是抽象类,则不能使用

Stuff.groovy

abstract class Stuff{
}
class StuffCommand{
    Stuff stuff
}
class ExampleController{
    def doStuffWithStuff(StuffCommand stuffCmd){
        render stuffCmd.stuff ? stuffCmd.stuff as JSON : ''
    }
}
StuffCommand.groovy

abstract class Stuff{
}
class StuffCommand{
    Stuff stuff
}
class ExampleController{
    def doStuffWithStuff(StuffCommand stuffCmd){
        render stuffCmd.stuff ? stuffCmd.stuff as JSON : ''
    }
}
示例控制器.groovy

abstract class Stuff{
}
class StuffCommand{
    Stuff stuff
}
class ExampleController{
    def doStuffWithStuff(StuffCommand stuffCmd){
        render stuffCmd.stuff ? stuffCmd.stuff as JSON : ''
    }
}
然后,请求
http://server:port/ctx/example/doStuffWithStuff?stuff=123
不会从我的数据库中从
stuff
表中获取记录#123。我喜欢这种方法的简洁性。对数据库的查询要么不进行,要么以静默方式失败

不过,以下变通方法有点帮助:

为抽象comain类创建一个转换
ValueConverter
的类。类名必须以
ValueConverter
结尾,而不能随意命名,例如
IdStringToStuffValueConverter

IdStringToStuffValueConverter

import org.grails.databinding.converters.ValueConverter

class IdStringToStuffValueConverter implements ValueConverter{
    @Override
    boolean canConvert(Object value) {
        value instanceof String || value instanceof Integer || value instanceof Long
    }

    @Override
    Object convert(Object value) {
        return Stuff.get(value.toLong())
    }

    @Override
    Class<?> getTargetType() {
        return Stuff
    }
}

在此操作期间,不会发生任何数据库查询,因此解决方法不包括此情况。如何使用抽象域类作为命令对象?

您应该重新处理您的问题,以显示非工作位,否则可能没有足够的信息来获得正确的答案。完成后,现在可能更清楚了。我还编辑了问题名称。