Объект JSON со встроенным массивом Сохранить в контроллере - PullRequest
1 голос
/ 18 марта 2012

Не уверен, как извлечь массив в 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 }
        }
    }   
}

1 Ответ

1 голос
/ 18 марта 2012

Связаны ли «Заказы» и «Заказы»?Я предполагаю, что они связаны как,

static hasMany = [ordersProducts: OrderProducts]

В этом случае, вы можете проанализировать строку в JSON и затем инициализировать объекты,

...
def j = grails.converters.JSON.parse(input)

def order = new Orders(j)
...

order.ordersProducts = j.products
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...