Отображение динамических полей в методе RestfulController POST (сохранить) - PullRequest
0 голосов
/ 24 апреля 2019

Как включить RestfulController для автоматического сопоставления или даже ручного сопоставления динамических полей с классами домена, реализующими MongoEntity?У меня есть класс домена, как показано ниже:

class Company implements MongoEntity<Company> {
    String id = UUID.randomUUID().toString()
    String name
    String email
    String phone
}

И у меня есть настройка RestfulController для операций CRUD, как показано ниже

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
        }
    }
}

Когда я POST запрос с некоторыми дополнительными полями JSON, как сделатьЯ получаю их автоматически сопоставленные с gorm_dynamic_attributes?В настоящее время объект компании не возвращает никакой информации о динамических атрибутах.Другая проблема, с которой я сталкиваюсь, заключается в том, что request.JSON также имеет значение null, поэтому я также не могу сопоставить вручную.Любые предложения будут высоко оценены.

1 Ответ

0 голосов
/ 26 апреля 2019

Я почти уверен, что проблема не в привязке данных вашего контроллера, а в сохранении экземпляра класса домена.

Я бы изменил класс домена следующим образом:

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. Вы можете поместить генерацию вашего идентификатора либо в коде контроллера / сервиса, либо оставить его внутри класса домена 'beforeValidate. В последнем случае обратите особое внимание на то, когда должен генерироваться идентификатор, так как beforeValidate() вызывается довольно часто. Также обратите внимание, что внутри beforeValidate() должен быть вызван сеттер.

Я протестировал аналогичный класс моего домена с save() и insert(), и в обоих случаях он работает как шарм.

...