Grails 视图为 DTO 对象列表呈现额外的逗号

Grails View Renders Extra Comma For DTO Object List

我正在努力将 Grails 4.0.0 应用程序升级到 4.0.4。应用程序主要是工作。 我在使用一个 GSON 视图时遇到问题 returns DTO 的集合(不是域对象)。

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

它 returns 预期对象的数组,但在 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
    }

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

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

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

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

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/index.gson

import com.myapp.dto.MyDTO

model {
    List<MyDTO> myDTOList
}

json tmpl.itemView(myDTOList)

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

import com.myapp.dto.MyDTO

model {
    MyDTO myDTO
}

json {
    afield myDTO.afield
}

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

[
    {
        "afield": "MY EXPECTED OBJECT 1 DATA"
    },
    {
        "afield": "MY EXPECTED OBJECT 2 DATA"
    }
]