Возникли проблемы с классами домена Grails.Я переопределяю конструктор для создания объекта класса домена из net.sf.json.JSONObject.Это прекрасно работает, когда я провоцирую объект через контроллер.Затем я попытался создать его с помощью тестового примера и получил исключение:
Нет сигнатуры метода: profileplugin.Contact.addToEmails () применим для типов аргументов: (java.lang.String)Значения: [нечто@something.com]
Я также должен отметить, что, похоже, это работает с некоторыми классами, но не с другими.Очень расстраивает - я новичок в Grails, так что если кто-нибудь может указать мне правильное направление, я буду очень признателен.
Вот мой код класса домена.
package profileplugin
import net.sf.json.JSONObject
class Contact
{
static hasMany =
[
phones: String,
faxes: String,
emails: String,
websites: String,
];
Contact() {}; // standard constructor must be specified, or grails dies
Contact(JSONObject source)
{
source.get('emails').each() { this.addToEmails(it); };
source.get('websites').each() { this.addToWebsites(it); };
source.get('phones').each() { this.addToPhones(it); };
source.get('faxes').each() { this.addToFaxes(it); };
};
}
И вот пример исходной строки JSON ...
[
addresses:[],
phones:["(555) 555-7011"],
faxes:[],
emails:["someone@something.com"],
websites:["http://www.google.com"]
]
И, наконец, вот версия сработавшего кода (после получения обратной связи ниже):
class Contact
{
def phones = [];
def faxes = [];
def emails = [];
def websites = [];
Contact() {}; // standard constructor must be specified, or grails dies
Contact(JSONObject source)
{
print source;
source.get('phones').each() { this.phones.add(it); };
source.get('emails').each() { this.emails.add(it); };
source.get('websites').each() { this.websites.add(it); };
source.get('faxes').each() { this.faxes.add(it); };
};
}