Использование JSON для создания объекта в Groovy / Grails

У меня есть веб-сайт Groovy / Grails, который используется для отправки данных клиентам Android через JSON. Я создал и клиент Android, и сайт Groovy / Grails; И они могут выводить те же объекты в JSON.

Я могу успешно создать соответствующие объекты в Android, сопоставляя вывод JSON с объектами Java, однако мне было интересно, можно ли использовать вывод JSON для создания нового объекта домена в Groovy / Grails? Есть ли способ передать выход JSON в действие контроллера, чтобы объект был создан?

Вот пример JSON, который я бы хотел отправить;

{ "class":"org.icc.callrz.BusinessCard.BusinessCard", "id":1, "businessCardDesigns":[], "emailAddrs":[ { "class":"org.icc.callrz.BusinessCard.EmailAddress", "id":1, "address":"chris@krslynx.com", "businessCard":{ "_ref":"../..", "class":"org.icc.callrz.BusinessCard.BusinessCard" }, "index":0, "type":{ "enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType", "name":"H" } }, { "class":"org.icc.callrz.BusinessCard.EmailAddress", "id":2, "address":"cb@i-cc.cc", "businessCard":{ "_ref":"../..", "class":"org.icc.callrz.BusinessCard.BusinessCard" }, "index":1, "type":{ "enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType", "name":"W" } } ] } 

«Класс» соответствует домену, который я хотел бы сохранить, идентификатор – это идентификатор домена, тогда каждый элемент в businessCardDesigns и emailAddrs должен быть сохранен с использованием аналогичных методов (в домене businessCardDesigns и emailAddrs являются ArrayLists ). Спасибо заранее!

РЕШЕНИЕ:

 @RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json") public ResponseEntity<String> createFromJson(@RequestBody String json) { Owner.fromJsonToOwner(json).persist(); return new ResponseEntity<String>(HttpStatus.CREATED); } 

Solutions Collecting From Web of "Использование JSON для создания объекта в Groovy / Grails"

Это может сработать для вас

http://static.springsource.org/spring-roo/reference/html/base-json.html

Использование встроенного конвертера Grails JSON делает это проще, чем другие ответы, на мой взгляд:

 import grails.converters.JSON class PersonController { def save = { def person = new Person(JSON.parse(params.person)) person.save(flush:true) } } 

Другие преимущества:

  • В любых файлах конфигурации нет необходимости гадать
  • В результате объект JSON можно обработать, если необходимо, перед назначением свойств
  • В коде намного яснее, что происходит (мы разбираем объект JSON и устанавливаем свойства в объекте Person)

Я знаю, что вы уже приняли ответ, но если я правильно прочитаю ваш вопрос, у нас есть встроенный способ «Grails».

Создайте запись для своего действия в URLMappings.groovy и включите синтаксический анализ запроса. Например, я создаю сопоставления RESTful следующим образом:

 "/api/bizCard/save"(controller: "businessCard", parseRequest: true) { action = [POST: "save"] } 

А потом у вас контроллер

 def save = { def businessCardInstance = new BusinessCard(params.businessCard) .... businessCardInstance.save(flush:true) }