问题描述
我正在将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的项目。
session.run(writer.init())
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
}
}
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
}