我开始接触我的组织的Groovy/Grails后端,并负责更新我们的Document
域对象上的User
。问题是,在从附加了正确参数的前端命中更新端点后,后端使用一个未更改的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响应,它显示了一个未更改的文档对象,并附加了完全相同的用户。我没有收到400,所以看起来联系人已经成功找到了。
我尝试将flush:true
添加到user.save
调用和document.save
调用中,但无济于事。
我的代码中有什么明显的错误吗?
发布于 2019-04-20 11:43:28
数据库操作应该在服务中,而不是在控制器中,使用@Transactional,最好是gorm版本,而不是spring版本。你不需要使用flush: true。然后,您可以从服务返回到控制器,并呈现为JSON。
发布于 2019-04-20 20:56:09
您没有声明您在服务器上看到了debug语句,表明找到了一个用户,也许它实际上永远不会进入这一部分?
我假设所提供的代码是不完整的,因为我们没有看到返回的survey
包含正在更新的document
。而且大括号看起来不平衡,似乎存在控制流问题。(即为什么有2个左大括号,但有3个右大括号?)
我建议您在代码上使用调试器来查看控制是如何实际流动的。大多数Java支持简单的调试,本质上是单击调试按钮而不是运行按钮。设置一些分散在这段代码中的断点,以捕获请求并从前端调用API端点。
发布于 2019-04-24 15:16:36
文档是父级吗?是否使用子对象?
User.addTodocument(someUser)
然后是Document.merge()
https://stackoverflow.com/questions/55766387
复制相似问题