如何启用RestfulController自动映射甚至手动将动态字段映射到实现MongoEntity的域类?我有一个域类如下:
class Company implements MongoEntity<Company> {
String id = UUID.randomUUID().toString()
String name
String email
String phone
}
我有一个用于CRUD操作的RestfulController设置,如下所示
class CompanyController extends RestfulController<Company> {
@Transactional
def save(Company company) {
if(company.hasErrors()) {
respond company.errors
}
else {
company.insert(flush:true)
respond company, status: CREATED
}
}
}
当我使用一些额外的JSON字段发布请求时,如何将它们自动映射到gorm_dynamic_attributes?目前,公司对象不返回有关动态属性的任何信息。我面临的另一个问题是request.JSON
也是null,所以我无法手动映射。任何建议都将受到高度赞赏。
我很确定,问题不在于控制器的数据绑定,而在于持久化域类实例。
我会像这样更改域类:
import grails.gorm.annotation.Entity
@Entity
class Company {
String id
String name
String email
String phone
def beforeValidate() {
if( !id ) setId UUID.randomUUID().toString()
}
static mapping = {
id generator:'assigned'
}
}
使用assigned
发电机。您可以将您的id生成放在控制器/服务代码中,或将其留在域类'beforeValidate
中。在后一种情况下,要特别注意何时生成id,因为beforeValidate()
经常被调用。另请注意,在beforeValidate()
内部必须调用一个setter。
我用save()
和insert()
测试了我的类似域类,并且在两种情况下都像魅力一样。