我开始接触我组织的Groovy / Grails后端,并负责更新User
域对象上的Document
。问题是,在使用附加了正确参数的前端访问更新端点后,后端将使用未更改的Document
对象进行响应。
代码如下:
if (requestParams.userEmail) {
def contact = User.findByEmail(requestParams.userEmail)
log.debug('Reading user found by passed email contact={} error={}',contact, contact.errors.allErrors.inspect())
if (!contact) {
response.status = 400
render WebserviceError.badInput as JSON
return
}
document.user = contact
document.user.save(flush: true)
}
document.save(flush: true)
render survey as JSON
前端返回一个Promise,并且我正在记录Promise响应,它显示了一个具有相同附加用户的不变Document对象。我没有收到400,因此看来已成功找到联系人。
我尝试将flush:true
添加到user.save
调用和document.save
调用中,但这没有帮助。
我的代码中是否存在明显的错误行为?
答案 0 :(得分:0)
好的db操作应该使用@Transactional在服务中,而不是在控制器中,最好是gorm版本而不是spring版本。您不需要使用flush:true。然后从服务中返回您可以返回到控制器的服务,并以JSON形式呈现。
答案 1 :(得分:0)
您没有声明在服务器上看到表明已找到用户的调试语句,也许实际上并没有进入本节?
我认为提供的代码不完整,因为我们看不到返回的survey
包含正在更新的document
。括号看起来也不平衡,好像存在控制流问题。 (即为什么有2个开括号但3个闭括号?)
我建议您在代码上使用调试器,以查看控件的实际流动方式。大多数Java IDE支持简单的调试,实际上是单击调试按钮而不是运行按钮。通过该代码设置一些断点,以捕获请求并从您的前端调用API端点。
答案 2 :(得分:0)
文档是父母吗?要孩子吗?
User.addTodocument(someUser)
然后Document.merge()