2016-02-08 2 views
10

Я пытаюсь использовать JSON-Views в Grails 3.1.Создайте JSON с JSON-Views

У меня есть следующий контроллер:

package myapp 

BasketController { 

    def index(ProductFilterCommand cmd) { 

     [basketList: service.findAllBaskets()] 
    } 
} 

И следующие классы:

package myapp 

class Basket { 
    List<BasketItem> items 
} 

class BasketItem { 
    String name 
} 

здесь являются gson файлы, которые я думал, что будет работать:

корзина/index.gson

import myapp.Basket 

model { 
    Iterable<Basket> basketList 
} 

json.baskets(basketList) { 
    g.render(template: "basket", model: [basket: it]) 
} 

корзина/_basket.gson

import myapp.Basket 

model { 
    Basket basket 
} 

json.items(basket.items) { 
    g.render(template: "item", model:[item: it]) 
} 

корзина/_item.gson

import myapp.Item 

model { 
    Item item 
} 

json g.render(item) 

Я хочу, чтобы генерировать JSON, такие как:

{ 
    "baskets": [{ 
     "items": [{ 
      "name": "T-shirt" 
     }, { 
      "name": "Pants" 
     }] 
    }, { 
     "items": [{ 
      "name": "T-shirt" 
     }, { 
      "name": "Pants" 
     }] 
    }] 
} 

Но вместо этого я получаю:

{ 
    "baskets": [ 
    {}, 
    {} 
    ] 
} 
+0

'Basket',' BasketItem' - Являются ли они классы домена? – dmahapatro

+1

Спасибо @dmahapatro Это сработало отлично. Я принял ваш ответ. Прости за мой запоздалый ответ. они не были классами доменов, а просто классными классами. –

+1

Для POGO, в отличие от классов домена, все эти церемонии и шаблоны не требуются, просто 'json {baskets basketList}' в 'index.gson' даст ожидаемый результат, поэтому мой вопрос ранее. Очевидно, вам понадобится 'model' dsl для basketList. :) – dmahapatro

ответ

10

Похож на ошибку мне. Единственный способ добиться того, что вы ищете, - использовать представления, как показано ниже. Также обратите внимание на использование collection вместо model. Я бы подал ошибку с примером приложения, которое я использовал для тестирования ниже.

Обратите внимание на использование шаблона как полное имя basket/item. Это дефект .

//index.gson 
import com.example.Basket 

model { 
    Iterable<Basket> basketItems 
} 

json { 
    baskets g.render(template: 'basket', collection: basketItems, var: 'basket') 
} 

//_basket.gson 
import com.example.Basket 

model { 
    Basket basket 
} 

json { 
    items g.render(template: "basket/item", collection: basket.items, var: 'item') 
} 

//_item.gson 
import com.example.BasketItem 

model { 
    BasketItem item 
} 

json g.render(item) 

//or if id is not required in response 
/*json { 
    name item.name 
}*/ 
+0

У меня есть эта проблема с видами-1.1.5. Шоу.gson выполняется, и выход json хорош. Но index.gson вообще не ссылается. У меня был файл system.out.println в index.gson для подтверждения. – Umapathy

Смежные вопросы