RestfulController POST(保存)方法中动态字段的映射

问题描述 投票:0回答:1

如何启用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,所以我无法手动映射。任何建议都将受到高度赞赏。

spring-boot grails groovy gorm gorm-mongodb
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()insert()测试了我的类似域类,并且在两种情况下都像魅力一样。

© www.soinside.com 2019 - 2024. All rights reserved.