Я пишу интерфейс ReactJS, который использует act-admin , который ожидает, что определенные виды информации будут возвращаться API REST, которые он вызывает. Одним из критериев перечисления ресурса является то, что общее количество ресурса также возвращается в ответе JSON API REST. Чтобы заставить мое приложение REST API Grails сделать это, действие index
для RestfulController
, сгенерированного из объектов моего Домена, помеченных @Resource
, должно не только возвращать коллекцию ресурсов, но также и «количество», указывающее общее количествоуказанных ресурсов. Это можно сделать несколькими различными способами, заключив исходный список ресурсов в data
и добавив дополнительное поле JSON с именем count
, или он может возвратить указанное «количество» через заголовок HTTP.
Очевидный способ сделать это - сгенерировать и изменить файл index.gson
для каждого из моих доменных объектов. Но я буду писать много повторяющегося кода (с разными вызовами GORM в каждом). Следующим очевидным способом является указание атрибута superClass
для аннотации @Resource
для каждой из моих сущностей в Домене, и, используя наследование, напишите базовый класс, такой как RestfulControllerWithTotalInIndex
, из которого каждая из моих сущностей в Домене будет иметь подкласс.
Но затем мне пришлось заглянуть в реализацию по умолчанию RestfulController
и выяснить, что вызов respond
в конце index
уже содержит модель, которая включает в себя счетчик. В частности, код выглядит следующим образом:
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
respond listAllResources(params), model: [("${resourceName}Count".toString()): countResources()]
}
Но даже при этом значение по умолчанию index.gson
на самом деле не render
это ${resourceName}Count
поле.
То, что я ищу, - это способ (может быть, где-то конфигурация), с помощью которого я могу представить уже упомянутый model
в фактическом выводе JSON моего REST API, надеюсь, без написания большого количества дубликатов. код. Что касается дублирующего кода, мне также было интересно, нужно ли мне что-то писать, могу ли я сделать это только один раз и позволить нескольким объектам домена повторно использовать один и тот же index.gson
«шаблон».