Не уверен, как извлечь массив в JSON из контроллера. У меня есть объект JSON, который содержит заказ с массивом продуктов. JSON выглядит так, но для краткости я сократил количество полей, которые у меня есть.
{ "customerId": "23", "customerName": "Johnson",
"products":[
{
"productId": "1",
"finalPrice": "1.00"
},
{
"productId": "2",
"finalPrice": "2.00"
},
{
"productId": "3",
"finalPrice": "3.00"
}
]}
Затем у меня есть код контроллера, который необходимо взять, проанализировать и сохранить в две таблицы ... Orders и OrdersProducts. Это то, что я имею до сих пор, но это не так, как нужно брать входные данные и циклически обрабатывать каждый элемент и сохранять.
class OrdersController {
def save = {
def input = request.JSON
def order = new Orders(input)
order.save(flush:true)
// Somehow I have to loop this for each item in array???
def products = new OrdersProducts(input)
products.ordersId = order.id
products.save(flush:true)
// ???????
}
}
---------- МОЕ РЕШЕНИЕ ----------
После того, как я взял ответ снизу и изменил его в соответствии со своими потребностями (унаследованная структура базы данных), я выполнил ручную вставку каждого продукта:
OrdersController.groovy
import grails.converters.JSON
import grails.converters.XML
class OrdersController {
def save = {
def i
def input = request.JSON
def order = new Orders(input)
if (order.save(failOnError:true)) {
for (def products: input.ordersProducts) {
def prod = new OrdersProducts(products)
prod.ordersId = order.id
if (prod.save(failOnError:true)) {
//
} else {
prod.errors.allErrors.each { println it }
}
}
} else {
order.errors.each { println it }
}
}
}