Grails视图为DTO对象列表渲染了额外的逗号

问题描述

我正在将Grails 4.0.0应用程序升级到4.0.4。应用程序正在正常工作。 我在一个GSON视图上遇到麻烦,该视图返回DTO的集合(不是域对象)。

版本:Grails 4.0.4,GORM 7.0.6.RELEASE,Win10,openjdk 1.8.0_262

它返回预期对象的数组,但在4.0.4中,在大括号后的字段之前有一个逗号,即:

[{,*MY EXPECTED OBJECT 1 DATA*},{,*MY EXPECTED OBJECT 2 DATA*}] 

这会使客户不满意。该视图如下所示:

    import com.myapp.dto.MyDTO
    
    model {
        List<MyDTO> MyDTOList
    }
    
    json g.render(template: "itemView",collection: MyDTOList)

即使只有一个字段,MyDTOList视图也会导致问题:


    json g.render(MyDTO) {
    afield MyDTO.afield
    }

如果我从视图(即空白视图)中删除了字段,则不会插入多余的逗号。如果可以提供更多信息,请告诉我。谢谢。

解决方法

您尚未描述所需的响应结构,但这是一个合理的猜测...

查看位于https://github.com/jeffbrown/daftspanieljson的项目。

https://github.com/jeffbrown/daftspanieljson/blob/dc54db2dc55db36df16338c88c106e67b1c6ecc4/grails-app/controllers/daftspanieljson/MyDTOController.groovy

session.run(writer.init())

https://github.com/jeffbrown/daftspanieljson/blob/dc54db2dc55db36df16338c88c106e67b1c6ecc4/grails-app/views/myDTO/index.gson

package daftspanieljson

import com.myapp.dto.MyDTO

class MyDTOController {
    static responseFormats = ['json','xml']

    def index() {
        def data = [new MyDTO(afield: 'MY EXPECTED OBJECT 1 DATA'),new MyDTO(afield: 'MY EXPECTED OBJECT 2 DATA')]

        respond data
    }
}

https://github.com/jeffbrown/daftspanieljson/blob/dc54db2dc55db36df16338c88c106e67b1c6ecc4/grails-app/views/myDTO/_itemView.gson

import com.myapp.dto.MyDTO

model {
    List<MyDTO> myDTOList
}

json tmpl.itemView(myDTOList)

运行该应用并向该操作发送请求时,会收到以下响应:

import com.myapp.dto.MyDTO

model {
    MyDTO myDTO
}

json {
    afield myDTO.afield
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...