Отобразить два значения объекта домена как один вывод JSON - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над Grails, и у меня есть сценарий использования с двумя классами доменов, классом A и классом B, которые являются независимыми классами. Я хочу, чтобы значения класса A и класса B отображались в одном представлении JSON.

class A                                                
String name,                                          
String age

class B
String report

В файле Bootstrap.groovy я написал следующий формат для отображения значений в представлении JSON.

JSON.registerObjectMarshaller(A) {it->
def result = [:]
result['name'] = it.name
result['age'] = it.age
result['report'] = it.report    //It throws an error no such property: report for class A.How to write it in a proper JSON format to retrieve the report value?

return result
}

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Если вам нужен более многократно используемый код, вы можете создать новый класс с открытыми свойствами, которые вы хотите отобразить в результате json.

class MyJSONResult(){
   String name
   String age
   String report
   // add more properties as needed

   // constructor
   MyJSONResult(A a, B b){
      name = a.name
      age = a.name
      report = b.report
   }
}

//when you need json result,
import grails.converters.JSON


def json = new MyJSONResult(a, b)
render json as JSON

Хорошая вещь о создании нового класса иОбъект в том, что вы можете использовать его повторно.Например, если вам нужно показать тот же результат на странице gsp, вы можете передать объект представлению и получить доступ к его свойствам.

def json = new MyJSONResult(a, b)
render view:'myview', model:[myVar: json]

// in gsp views
${myVar.name}

Таким образом любая бизнес-логика, использованная вами при создании полезной нагрузки json, можетбыть использованы для вашего API или в любом другом месте, вам может понадобиться использовать их

0 голосов
/ 19 сентября 2018

Из документации

Groovy поставляется с интегрированной поддержкой преобразования между объектами Groovy и JSON.Классы, посвященные сериализации и синтаксическому анализу JSON, находятся в пакете groovy.json.

Например, вы можете использовать groovy.json.JsonBuilder

.Например, вы можете попробовать это

Наличие классов A и B

class A {
    String name
    String age
}

class B {
    String report
}

Импорт JsonBuilder в файле Bootstrap.groovy

import groovy.json.JsonBuilder

И тогда вы можете попробовать

A a = new A(name: 'ana', age: '15')
B b = new B(report: 'lorem ipsum...')

JsonBuilder jsonBuilder = new JsonBuilder()

jsonBuilder.result {
    name a.name
    age a.age
    report b.report
}

println jsonBuilder.toString()

Выход

{"result":{"name":"ana","age":"15","report":"lorem ipsum..."}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...