コントローラからJSONの配列を抽出する方法が不明です。私は製品の配列を持つ注文を含むJSONオブジェクトを持っています。 JSONはこのように入れ子になっていますが、簡潔にするために私は多くのフィールドを減らしました。組み込み配列のJSONオブジェクトコントローラに保存
{ "customerId": "23", "customerName": "Johnson",
"products":[
{
"productId": "1",
"finalPrice": "1.00"
},
{
"productId": "2",
"finalPrice": "2.00"
},
{
"productId": "3",
"finalPrice": "3.00"
}
]}
私は、これを取ると、それを解析し、二つのテーブル...受注及び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)
// ???????
}
}
---------- MY SOLUTION ----------
、(
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 }
}
}
}
残念ながらそのレガシーデータベースと二つのフィールドを介してリンクすることができます。だから私はこれを手動で行う必要があります。 'Orders 'クラスに – JPM
を追加すると、' hasMany 'を使用して' OrdersProduct 'に関連付けることができます。これが実現できない場合は、j.products.each {new OrderProducts(it)} – aldrin
をループしてループすることができます。grails.converters.JSON.parseエラーでも、メソッドのシグネチャがありません:静的grails.converters.JSON.parse()は引数型に適用されます:(org.codehaus.groovy.grails.web.json.JSONObject ")Grailsを使っている理由は何ですか?単純ではない、簡単なことです。 – JPM