我想在使用Grails时使用DTO。我的DTO基本上是这样的:
class ProjectDTO {
Long id
Long version
String name
}
我把文件放在src / groovy中,所以grails知道这不是域模型。 我还有一个转换器,可以将我的projectDTO转换为项目对象。
@Transactional
def save(ProjectDTO projectInstance) {
if (projectInstance == null) {
render status: NOT_FOUND
return
}
ProjectDTOConverter converter = new ProjectDTOConverter()
Project p = converter.convertFromDTOForSave(projectInstance)
p = projectService.save(p)
List<ProjectDTO> r = converter.convertToDTO(p)
respond r, [status: CREATED]
}
此策略似乎适用于GET,POST和DELETE操作,但不适用于PUT操作。似乎对于put操作,grails总是认为我的projectInstance变量为null,即使它被正确传递。
我做了一个SQL假脱机,似乎当你将任何对象传入PUT操作时,grails假定你正在使用一个域对象,并发出一个SQL语句来尝试从数据库中检索对象。如果无法检索对象,则由于某种原因,projectInstance会被清空。
有没有人知道是否有办法指示Grails我为PUT操作传入的对象不是域模型,而且grails不应该从数据库中检索它?