我的域类中有几个属性。但是,我只希望通过params
对象设置它们中的一些。有什么好办法呢?
示例:
域
class Color {
String name
String shade //don't want this set by params
}
控制器
class ColorController {
def save() {
json {
def c = new Color(params?.color)
c.save(flush: true)
//..more code
}
}
}
如果有人发送了以下请求:
{"color":
{name: "red",
shade: "light"
}
}
然后用户可以更改shade
属性。我怎么能阻止这个?
答案 0 :(得分:1)
你可能会做以下几件事之一:
transient beforeInsert() {}
和/或transient beforeUpdate() {}
方法,并处理属性设置(或不设置)。由于Groovy让我不想搞砸getter和setter,除非我绝对不得不这样做,我通常使用beforeInsert
和beforeUpdate
方法。
答案 1 :(得分:1)
Grails在控制器上提供了一个bindData方法,可以对数据绑定进行细粒度控制。对于您的示例,您可以将其写为:
class ColorController {
def save() {
json {
def c = new Color()
bindData(c, params, [include: 'name'])
c.save(flush: true)
//..more code
}
}
}
在这种情况下,在尝试c
之前,只会在save
个实例上设置“名称”字段。
如果您想对传入的params
进行额外验证,我还建议您使用Command Object进行数据绑定。