Сбой генерации JSON / XML Grails - PullRequest
       5

Сбой генерации JSON / XML Grails

0 голосов
/ 22 сентября 2011

У меня есть некоторый код в моем контроллере, который выдает мне неизвестные исключения, может кто-нибудь подсказать мне, что происходит?см. код ниже:

class FooController {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]


    def xmlList = {
        render Foo.list() as XML
    }

    def jsonList = {
        render Foo.list() as JSON
    }
//...
}

когда я пытаюсь сгенерировать JSON в середине (самая странная его часть ...), я получаю следующую трассировку стека:

[http-8080-2] [tenant 122] ERROR errors.GrailsExceptionResolver  - Exception occurred when processing request: [GET] /project/foo/jsonList
Stacktrace follows:
org.codehaus.groovy.grails.web.json.JSONException: Misplaced key.
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.convertAnother(JSON.java:161)
at grails.converters.JSON.value(JSON.java:198)
at grails.converters.JSON.render(JSON.java:133)
at grails.converters.JSON.render(JSON.java:149)
at com.foo.FooController$_closure2.doCall(FooController.groovy:18)
at com.foo.FooController$_closure2.doCall(FooController.groovy)
at java.lang.Thread.run(Thread.java:662)

при попытке создать xml на экране появляется следующая ошибка:

Эта страница содержит следующие ошибки:

ошибка в строке 1 в столбце 68: Ошибка кодирования Ниже приведенарендеринг страницы до первой ошибки.

и следующей трассировки стека:

[http-8080-2] [tenant 122] ERROR errors.GrailsExceptionResolver  - Exception occurred when processing request: [GET] /project/foo/xmlList
Stacktrace follows:
java.lang.NullPointerException
at grails.converters.XML.getElementName(XML.java:130)
at grails.converters.XML.convertAnother(XML.java:173)
at grails.converters.XML.convertAnother(XML.java:173)
at grails.converters.XML.convertAnother(XML.java:173)
at grails.converters.XML.convertAnother(XML.java:173)
at grails.converters.XML.convertAnother(XML.java:173)
at grails.converters.XML.convertAnother(XML.java:173)
at grails.converters.XML.convertAnother(XML.java:173)
at grails.converters.XML.convertAnother(XML.java:173)
at grails.converters.XML.render(XML.java:113)
at grails.converters.XML.render(XML.java:256)
at com.foo.FooController$_closure1.doCall(FooController.groovy:14)
at com.foo.FooController$_closure1.doCall(FooController.groovy)
at java.lang.Thread.run(Thread.java:662)

вот мой Foo.groovy:

@MultiTenant
class Foo {

    String name
    String description
    List modules = new ArrayList();

    static belongsTo = [something : Something]
    static hasMany = [anything : Anything]

    static mapping = {
        table 'foo'
        version false // version is set to false, because this isn't available by     default for legacy databases
        id generator:'identity', column:'id'
        sort "name"
        description sqlType: "text"
        tenantId column:'tenant_id'
    }

    static constraints = {
        something(blank:false)
        name(size:1..100, blank:false, unique:['tenantId','project'])
        description()
    }



    @Override
    String toString() {
        return name
    }
}

версия Grails ->1.3.7 Я новичок в Grails, прости меня, если я спрашиваю что-то новенькое, но у меня здесь настоящие проблемы ...

Ответы [ 2 ]

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

Это обходной путь, который я использую.

def foos = Foos.findAll()
def array = []
for (Foo acc : foos) {
    def data = new Foo(id: acc.id,  bar : acc.bar)
    array << data
}
render array as JSON
0 голосов
/ 22 сентября 2011

Я не могу попробовать ваш код в данный момент, поэтому я пытаюсь предложить вам обходной путь:

def jsonList = {
        def foos = Foo.list()
        render(contentType:"text/json") {
            foos {
                 for(f in foos) {
                     foo(name: f.name, description: f.description)
                 }
            }   
       }
}

И то же самое для вашего метода контроллера xmlList.

Дайте мне знатьэто работает для вас.

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