0

如何启用 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也是空的,所以我也不能手动映射。任何建议将不胜感激。

4

1 回答 1

0

我很确定,问题不在于控制器的数据绑定,而在于域类实例的持久化。

我会像这样更改域类:

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()andinsert()和 and 测试了我的类似域类,在这两种情况下都像魅力一样工作。

于 2019-04-25T23:11:13.747 回答